summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2011-08-10 17:08:03 +0200
committerBram Moolenaar <Bram@vim.org>2011-08-10 17:08:03 +0200
commit8c85fa3b2659a01fc1462ea26140ad2d0622e5b0 (patch)
tree569a36665fef6bf623fdfe92ac17cf1c3d273518 /src
parentcf839732113e19a53302331d4f479a5e844a4a67 (diff)
downloadvim-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.c19
-rw-r--r--src/gui_w48.c20
-rw-r--r--src/os_mswin.c10
-rw-r--r--src/os_win32.c12
-rw-r--r--src/os_win32.h14
-rw-r--r--src/version.c2
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,