From eb147960b1b4a42737f31afe1c0e70c6216812b6 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Wed, 7 Nov 2012 18:44:48 +0200 Subject: [PATCH] Fix bug #1280 with non-ASCII keyboard input on MS-Windows. src/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. --- src/ChangeLog | 8 ++++++++ src/w32fns.c | 19 ++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e5c6dd6285d..77faa94207e 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +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) + 2012-11-07 Dmitry Antipov * xfns.c (Fx_wm_set_size_hint): Use check_x_frame. Adjust docstring. diff --git a/src/w32fns.c b/src/w32fns.c index 24760054523..e9e19502479 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -2974,12 +2974,21 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { DWORD modifiers = construct_console_modifiers (); - 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. */ + 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))) { - /* 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) -- 2.39.5