From: Eli Zaretskii Date: Wed, 7 Nov 2012 21:12:25 +0000 (+0200) Subject: A (hopefully) better fix for bug #1280. X-Git-Tag: emacs-24.3.90~173^2~18^2~178 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=dab72075f5caae9f0603b358d58023f4f210d876;p=emacs.git A (hopefully) better fix for bug #1280. src/w32fns.c (modifier_set): Don't report modifiers from toggle key, such as Scroll Lock, if the respective keys are treated as function keys, not as modifiers. This avoids destroying non-ASCII keyboard input when Scroll Lock is toggled ON. --- diff --git a/src/ChangeLog b/src/ChangeLog index c1b42e276c5..04b66ba7cc7 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,10 +1,9 @@ 2012-11-07 Eli Zaretskii - * w32fns.c (w32_wnd_proc): Don't directly handle key chords - including modifiers from toggle key, such as Scroll Lock, if the - respective keys are treated as function keys, not as modifiers. - This avoids destroying non-ASCII keyboard input when Scroll Lock - is toggled ON. (Bug#1280) + * w32fns.c (modifier_set): Don't report modifiers from toggle key, + such as Scroll Lock, if the respective keys are treated as + function keys, not as modifiers. This avoids destroying non-ASCII + keyboard input when Scroll Lock is toggled ON. (Bug#1280) (modifier_set): Do not omit checking the Num Lock key. 2012-11-07 Dmitry Antipov diff --git a/src/w32fns.c b/src/w32fns.c index dc395551a4a..b5e717f8980 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -2085,8 +2085,28 @@ sync_modifiers (void) static int modifier_set (int vkey) { - if (vkey == VK_CAPITAL || vkey == VK_SCROLL || vkey == VK_NUMLOCK) - return (GetKeyState (vkey) & 0x1); + if (vkey == VK_CAPITAL) + { + if (NILP (Vw32_enable_caps_lock)) + return 0; + else + return (GetKeyState (vkey) & 0x1); + } + if (vkey == VK_SCROLL) + { + if (NILP (Vw32_scroll_lock_modifier)) + return 0; + else + return (GetKeyState (vkey) & 0x1); + } + if (vkey == VK_NUMLOCK) + { + if (NILP (Vw32_enable_num_lock)) + return 0; + else + return (GetKeyState (vkey) & 0x1); + } + if (!modifiers_recorded) return (GetKeyState (vkey) & 0x8000); @@ -2974,21 +2994,12 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { DWORD modifiers = construct_console_modifiers (); - /* Always let TranslateMessage handle AltGr key chords; - for some reason, ToAscii doesn't always process AltGr - chords correctly. */ - if ((!NILP (Vw32_recognize_altgr) - && modifier_set (VK_LCONTROL) && modifier_set (VK_RMENU)) - /* If a toggle key is used as a function key, let - TranslateMessage handle keys pressed while the - toggled key is ON. This avoids munging non-ASCII - keys, like interpreting them as ASCII keys below, - when, e.g., Scroll Lock is toggled ON. */ - || (NILP (Vw32_scroll_lock_modifier) - && modifier_set (VK_SCROLL)) - || (NILP (Vw32_enable_num_lock) && modifier_set (VK_NUMLOCK)) - || (NILP (Vw32_enable_caps_lock) && modifier_set (VK_CAPITAL))) + if (!NILP (Vw32_recognize_altgr) + && modifier_set (VK_LCONTROL) && modifier_set (VK_RMENU)) { + /* Always let TranslateMessage handle AltGr key chords; + for some reason, ToAscii doesn't always process AltGr + chords correctly. */ windows_translate = 1; } else if ((modifiers & (~SHIFT_PRESSED & ~CAPSLOCK_ON)) != 0)