diff options
author | Bram Moolenaar <Bram@vim.org> | 2011-08-10 17:08:03 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2011-08-10 17:08:03 +0200 |
commit | 8c85fa3b2659a01fc1462ea26140ad2d0622e5b0 (patch) | |
tree | 569a36665fef6bf623fdfe92ac17cf1c3d273518 /src | |
parent | cf839732113e19a53302331d4f479a5e844a4a67 (diff) | |
download | vim-8c85fa3b2659a01fc1462ea26140ad2d0622e5b0.zip |
updated for version 7.3.277
Problem: MS-Windows: some characters do not show in dialogs.
Solution: Use the wide methods when available. (Yanwei Jia)
Diffstat (limited to 'src')
-rw-r--r-- | src/gui_w32.c | 19 | ||||
-rw-r--r-- | src/gui_w48.c | 20 | ||||
-rw-r--r-- | src/os_mswin.c | 10 | ||||
-rw-r--r-- | src/os_win32.c | 12 | ||||
-rw-r--r-- | src/os_win32.h | 14 | ||||
-rw-r--r-- | src/version.c | 2 |
6 files changed, 60 insertions, 17 deletions
diff --git a/src/gui_w32.c b/src/gui_w32.c index 0966afe40..4a34cb4f2 100644 --- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -1270,6 +1270,25 @@ gui_mch_prepare(int *argc, char **argv) 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 } /* diff --git a/src/gui_w48.c b/src/gui_w48.c index 445104dae..4667dc7aa 100644 --- a/src/gui_w48.c +++ b/src/gui_w48.c @@ -390,7 +390,7 @@ _OnBlinkTimer( KillTimer(NULL, idEvent); /* Eat spurious WM_TIMER messages */ - while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) + while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) ; if (blink_state == BLINK_ON) @@ -418,7 +418,7 @@ gui_mswin_rm_blink_timer(void) { KillTimer(NULL, blink_timer); /* Eat spurious WM_TIMER messages */ - while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) + while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) ; blink_timer = 0; } @@ -476,7 +476,7 @@ _OnTimer( s_timed_out = TRUE; /* Eat spurious WM_TIMER messages */ - while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) + while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) ; if (idEvent == s_wait_timer) s_wait_timer = 0; @@ -1707,7 +1707,7 @@ process_message(void) static char_u k10[] = {K_SPECIAL, 'k', ';', 0}; #endif - GetMessage(&msg, NULL, 0, 0); + pGetMessage(&msg, NULL, 0, 0); #ifdef FEAT_OLE /* Look after OLE Automation commands */ @@ -1718,7 +1718,7 @@ process_message(void) { /* Message can't be ours, forward it. Fixes problem with Ultramon * 3.0.4 */ - DispatchMessage(&msg); + pDispatchMessage(&msg); } else { @@ -1749,14 +1749,14 @@ process_message(void) if (msg.message == WM_USER) { MyTranslateMessage(&msg); - DispatchMessage(&msg); + pDispatchMessage(&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)) + if (s_findrep_hwnd != NULL && pIsDialogMessage(s_findrep_hwnd, &msg)) { HandleMouseHide(msg.message, msg.lParam); return; @@ -1928,7 +1928,7 @@ process_message(void) if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE, NULL, NULL) == NULL) #endif - DispatchMessage(&msg); + pDispatchMessage(&msg); } /* @@ -1943,7 +1943,7 @@ gui_mch_update(void) MSG msg; if (!s_busy_processing) - while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) + while (pPeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) && !vim_is_input_buf_full()) process_message(); } @@ -2019,7 +2019,7 @@ gui_mch_wait_for_chars(int wtime) KillTimer(NULL, s_wait_timer); /* Eat spurious WM_TIMER messages */ - while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) + while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE)) ; s_wait_timer = 0; } diff --git a/src/os_mswin.c b/src/os_mswin.c index 1c1348a4e..49b142895 100644 --- a/src/os_mswin.c +++ b/src/os_mswin.c @@ -1856,12 +1856,12 @@ AbortProc(HDC hdcPrn, int iCode) { MSG msg; - while (!*bUserAbort && PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) + while (!*bUserAbort && pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { - if (!hDlgPrint || !IsDialogMessage(hDlgPrint, &msg)) + if (!hDlgPrint || !pIsDialogMessage(hDlgPrint, &msg)) { TranslateMessage(&msg); - DispatchMessage(&msg); + pDispatchMessage(&msg); } } return !*bUserAbort; @@ -3132,10 +3132,10 @@ serverProcessPendingMessages(void) { MSG msg; - while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) + while (pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); - DispatchMessage(&msg); + pDispatchMessage(&msg); } } diff --git a/src/os_win32.c b/src/os_win32.c index 88ead6fd6..0d8bbf7d3 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -152,6 +152,14 @@ static PFNGCKLN s_pfnGetConsoleKeyboardLayoutName = NULL; # 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,10 +3292,10 @@ mch_system_classic(char *cmd, int options) { MSG msg; - if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE)) + if (pPeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); - DispatchMessage(&msg); + pDispatchMessage(&msg); } if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT) break; diff --git a/src/os_win32.h b/src/os_win32.h index 41a44bf0d..5303d6ddc 100644 --- a/src/os_win32.h +++ b/src/os_win32.h @@ -193,3 +193,17 @@ Trace(char *pszFormat, ...); #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 diff --git a/src/version.c b/src/version.c index cdbde1248..517310e2c 100644 --- a/src/version.c +++ b/src/version.c @@ -710,6 +710,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 277, +/**/ 276, /**/ 275, |