changeset 6151:121613e72e39 v7.4.413

updated for version 7.4.413 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)
author Bram Moolenaar <bram@vim.org>
date Fri, 22 Aug 2014 18:44:33 +0200
parents 9304efa28792
children 9d02417f8af0
files src/gui_w48.c src/version.c
diffstat 2 files changed, 17 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -614,6 +614,8 @@ char_to_string(int ch, char_u *string, i
     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 */
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    413,
+/**/
     412,
 /**/
     411,