| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.277 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.3.277 |
| Problem: MS-Windows: some characters do not show in dialogs. |
| Solution: Use the wide methods when available. (Yanwei Jia) |
| Files: src/gui_w32.c, src/gui_w48.c, src/os_mswin.c, src/os_win32.c, |
| src/os_win32.h |
| |
| |
| |
| |
| |
| *** 1270,1275 **** |
| --- 1270,1294 ---- |
| pGetMonitorInfo = (TGetMonitorInfo)GetProcAddress(user32_lib, |
| "GetMonitorInfoA"); |
| } |
| + |
| + #ifdef FEAT_MBYTE |
| + /* If the OS is Windows NT, use wide functions; |
| + * this enables common dialogs input unicode from IME. */ |
| + if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT) |
| + { |
| + pDispatchMessage = DispatchMessageW; |
| + pGetMessage = GetMessageW; |
| + pIsDialogMessage = IsDialogMessageW; |
| + pPeekMessage = PeekMessageW; |
| + } |
| + else |
| + { |
| + pDispatchMessage = DispatchMessageA; |
| + pGetMessage = GetMessageA; |
| + pIsDialogMessage = IsDialogMessageA; |
| + pPeekMessage = PeekMessageA; |
| + } |
| + #endif |
| } |
| |
| /* |
| |
| |
| |
| *** 390,396 **** |
| KillTimer(NULL, idEvent); |
| |
| /* Eat spurious WM_TIMER messages */ |
| ! while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) |
| ; |
| |
| if (blink_state == BLINK_ON) |
| --- 390,396 ---- |
| KillTimer(NULL, idEvent); |
| |
| /* Eat spurious WM_TIMER messages */ |
| ! while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) |
| ; |
| |
| if (blink_state == BLINK_ON) |
| |
| *** 418,424 **** |
| { |
| KillTimer(NULL, blink_timer); |
| /* Eat spurious WM_TIMER messages */ |
| ! while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) |
| ; |
| blink_timer = 0; |
| } |
| --- 418,424 ---- |
| { |
| KillTimer(NULL, blink_timer); |
| /* Eat spurious WM_TIMER messages */ |
| ! while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) |
| ; |
| blink_timer = 0; |
| } |
| |
| *** 476,482 **** |
| s_timed_out = TRUE; |
| |
| /* Eat spurious WM_TIMER messages */ |
| ! while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) |
| ; |
| if (idEvent == s_wait_timer) |
| s_wait_timer = 0; |
| --- 476,482 ---- |
| s_timed_out = TRUE; |
| |
| /* Eat spurious WM_TIMER messages */ |
| ! while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) |
| ; |
| if (idEvent == s_wait_timer) |
| s_wait_timer = 0; |
| |
| *** 1707,1713 **** |
| static char_u k10[] = {K_SPECIAL, 'k', ';', 0}; |
| #endif |
| |
| ! GetMessage(&msg, NULL, 0, 0); |
| |
| #ifdef FEAT_OLE |
| /* Look after OLE Automation commands */ |
| --- 1707,1713 ---- |
| static char_u k10[] = {K_SPECIAL, 'k', ';', 0}; |
| #endif |
| |
| ! pGetMessage(&msg, NULL, 0, 0); |
| |
| #ifdef FEAT_OLE |
| /* Look after OLE Automation commands */ |
| |
| *** 1718,1724 **** |
| { |
| /* Message can't be ours, forward it. Fixes problem with Ultramon |
| * 3.0.4 */ |
| ! DispatchMessage(&msg); |
| } |
| else |
| { |
| --- 1718,1724 ---- |
| { |
| /* Message can't be ours, forward it. Fixes problem with Ultramon |
| * 3.0.4 */ |
| ! pDispatchMessage(&msg); |
| } |
| else |
| { |
| |
| *** 1749,1762 **** |
| if (msg.message == WM_USER) |
| { |
| MyTranslateMessage(&msg); |
| ! DispatchMessage(&msg); |
| return; |
| } |
| #endif |
| |
| #ifdef MSWIN_FIND_REPLACE |
| /* Don't process messages used by the dialog */ |
| ! if (s_findrep_hwnd != NULL && IsDialogMessage(s_findrep_hwnd, &msg)) |
| { |
| HandleMouseHide(msg.message, msg.lParam); |
| return; |
| --- 1749,1762 ---- |
| if (msg.message == WM_USER) |
| { |
| MyTranslateMessage(&msg); |
| ! pDispatchMessage(&msg); |
| return; |
| } |
| #endif |
| |
| #ifdef MSWIN_FIND_REPLACE |
| /* Don't process messages used by the dialog */ |
| ! if (s_findrep_hwnd != NULL && pIsDialogMessage(s_findrep_hwnd, &msg)) |
| { |
| HandleMouseHide(msg.message, msg.lParam); |
| return; |
| |
| *** 1928,1934 **** |
| if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE, |
| NULL, NULL) == NULL) |
| #endif |
| ! DispatchMessage(&msg); |
| } |
| |
| /* |
| --- 1928,1934 ---- |
| if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE, |
| NULL, NULL) == NULL) |
| #endif |
| ! pDispatchMessage(&msg); |
| } |
| |
| /* |
| |
| *** 1943,1949 **** |
| MSG msg; |
| |
| if (!s_busy_processing) |
| ! while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) |
| && !vim_is_input_buf_full()) |
| process_message(); |
| } |
| --- 1943,1949 ---- |
| MSG msg; |
| |
| if (!s_busy_processing) |
| ! while (pPeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) |
| && !vim_is_input_buf_full()) |
| process_message(); |
| } |
| |
| *** 2019,2025 **** |
| KillTimer(NULL, s_wait_timer); |
| |
| /* Eat spurious WM_TIMER messages */ |
| ! while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) |
| ; |
| s_wait_timer = 0; |
| } |
| --- 2019,2025 ---- |
| KillTimer(NULL, s_wait_timer); |
| |
| /* Eat spurious WM_TIMER messages */ |
| ! while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) |
| ; |
| s_wait_timer = 0; |
| } |
| |
| |
| |
| *** 1856,1867 **** |
| { |
| MSG msg; |
| |
| ! while (!*bUserAbort && PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) |
| { |
| ! if (!hDlgPrint || !IsDialogMessage(hDlgPrint, &msg)) |
| { |
| TranslateMessage(&msg); |
| ! DispatchMessage(&msg); |
| } |
| } |
| return !*bUserAbort; |
| --- 1856,1867 ---- |
| { |
| MSG msg; |
| |
| ! while (!*bUserAbort && pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) |
| { |
| ! if (!hDlgPrint || !pIsDialogMessage(hDlgPrint, &msg)) |
| { |
| TranslateMessage(&msg); |
| ! pDispatchMessage(&msg); |
| } |
| } |
| return !*bUserAbort; |
| |
| *** 3132,3141 **** |
| { |
| MSG msg; |
| |
| ! while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) |
| { |
| TranslateMessage(&msg); |
| ! DispatchMessage(&msg); |
| } |
| } |
| |
| --- 3132,3141 ---- |
| { |
| MSG msg; |
| |
| ! while (pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) |
| { |
| TranslateMessage(&msg); |
| ! pDispatchMessage(&msg); |
| } |
| } |
| |
| |
| |
| |
| *** 152,157 **** |
| --- 152,165 ---- |
| # define wcsicmp(a, b) wcscmpi((a), (b)) |
| #endif |
| |
| + /* Enable common dialogs input unicode from IME if posible. */ |
| + #ifdef FEAT_MBYTE |
| + LRESULT (WINAPI *pDispatchMessage)(LPMSG) = DispatchMessage; |
| + BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT) = GetMessage; |
| + BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG) = IsDialogMessage; |
| + BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT) = PeekMessage; |
| + #endif |
| + |
| #ifndef FEAT_GUI_W32 |
| /* Win32 Console handles for input and output */ |
| static HANDLE g_hConIn = INVALID_HANDLE_VALUE; |
| |
| *** 3284,3293 **** |
| { |
| MSG msg; |
| |
| ! if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE)) |
| { |
| TranslateMessage(&msg); |
| ! DispatchMessage(&msg); |
| } |
| if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT) |
| break; |
| --- 3292,3301 ---- |
| { |
| MSG msg; |
| |
| ! if (pPeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE)) |
| { |
| TranslateMessage(&msg); |
| ! pDispatchMessage(&msg); |
| } |
| if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT) |
| break; |
| |
| |
| |
| *** 193,195 **** |
| --- 193,209 ---- |
| #else |
| # define vim_mkdir(x, y) mch_mkdir(x) |
| #endif |
| + |
| + /* Enable common dialogs input unicode from IME if posible. */ |
| + #ifdef FEAT_MBYTE |
| + /* The variables are defined in os_win32.c. */ |
| + extern LRESULT (WINAPI *pDispatchMessage)(LPMSG); |
| + extern BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT); |
| + extern BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG); |
| + extern BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT); |
| + #else |
| + # define pDispatchMessage DispatchMessage |
| + # define pGetMessage GetMessage |
| + # define pIsDialogMessage IsDialogMessage |
| + # define pPeekMessage PeekMessage |
| + #endif |
| |
| |
| |
| *** 711,712 **** |
| --- 711,714 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 277, |
| /**/ |
| |
| -- |
| Veni, Vidi, VW -- I came, I saw, I drove around in a little car. |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |