]> granicus.if.org Git - vim/commitdiff
updated for version 7.4.413 v7.4.413
authorBram Moolenaar <Bram@vim.org>
Fri, 22 Aug 2014 16:44:33 +0000 (18:44 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 22 Aug 2014 16:44:33 +0000 (18:44 +0200)
Problem:    MS-Windows: Using US international keyboard layout, inserting dead
            key by pressing space does not always work.  Issue 250.
Solution:   Let MS-Windows translate the message. (John Wellesz)

src/gui_w48.c
src/version.c

index ae4c921c0d9ac9801cf8ea5d8141de60e670a117..cd7fdde54988051a46dbcc94397c39415468e1cf 100644 (file)
@@ -614,6 +614,8 @@ _OnChar(
     char_u     string[40];
     int                len = 0;
 
+    dead_key = 0;
+
     len = char_to_string(ch, string, 40, FALSE);
     if (len == 1 && string[0] == Ctrl_C && ctrl_c_interrupts)
     {
@@ -1788,24 +1790,21 @@ process_message(void)
     if (msg.message == WM_KEYDOWN || msg.message == WM_SYSKEYDOWN)
     {
        vk = (int) msg.wParam;
-       /* handle key after dead key, but ignore shift, alt and control */
-       if (dead_key && vk != VK_SHIFT && vk != VK_MENU && vk != VK_CONTROL)
+       /*
+        * If a dead key was pressed and the user presses VK_SPACE, VK_BACK, or
+        * VK_ESCAPE it means that he actually wants to deal with the dead char
+        * now, so do nothing special and let Windows handle it.
+        *
+        * Note that VK_SPACE combines with the dead_key's character and only
+        * one WM_CHAR will be generated by TranslateMessage(), in the two
+        * other cases two WM_CHAR will be generated: the dead char and VK_BACK
+        * or VK_ESCAPE.  That is most likely what the user expects.
+        */
+       if (dead_key && (vk == VK_SPACE || vk == VK_BACK || vk == VK_ESCAPE))
        {
            dead_key = 0;
-           /* handle non-alphabetic keys (ones that hopefully cannot generate
-            * umlaut-characters), unless when control is down */
-           if (vk < 'A' || vk > 'Z' || (GetKeyState(VK_CONTROL) & 0x8000))
-           {
-               MSG dm;
-
-               dm.message = msg.message;
-               dm.hwnd = msg.hwnd;
-               dm.wParam = VK_SPACE;
-               MyTranslateMessage(&dm);        /* generate dead character */
-               if (vk != VK_SPACE) /* and send current character once more */
-                   PostMessage(msg.hwnd, msg.message, msg.wParam, msg.lParam);
-               return;
-           }
+           MyTranslateMessage(&msg);
+           return;
        }
 
        /* Check for CTRL-BREAK */
index 40b7ae483ad77a3e0e88b44608000c08db3d9fca..e742d187c14ec0e88c0e6eb55d42292340863dee 100644 (file)
@@ -741,6 +741,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    413,
 /**/
     412,
 /**/