| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.413 |
| 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.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) |
| Files: src/gui_w48.c |
| |
| |
| |
| |
| |
| *** 614,619 **** |
| --- 614,621 ---- |
| 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,1811 **** |
| 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) |
| { |
| 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; |
| ! } |
| } |
| |
| /* Check for CTRL-BREAK */ |
| --- 1790,1810 ---- |
| if (msg.message == WM_KEYDOWN || msg.message == WM_SYSKEYDOWN) |
| { |
| vk = (int) msg.wParam; |
| ! /* |
| ! * 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; |
| ! MyTranslateMessage(&msg); |
| ! return; |
| } |
| |
| /* Check for CTRL-BREAK */ |
| |
| |
| |
| *** 743,744 **** |
| --- 743,746 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 413, |
| /**/ |
| |
| -- |
| hundred-and-one symptoms of being an internet addict: |
| 43. You tell the kids they can't use the computer because "Daddy's got work to |
| do" and you don't even have a job. |
| |
| /// 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 /// |