From 880027430c5580abf612a82273bd49b75b9fb73c Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 8 Nov 2012 19:02:56 +0200 Subject: [PATCH] More fixes for bug #12806. src/w32fns.c (modifier_set): Fix handling of Scroll Lock when the value of w32-scroll-lock-modifier is neither nil nor one of the known key modifiers. --- src/ChangeLog | 6 ++++++ src/w32fns.c | 16 +++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 7ddff43d94d..8f2aa41bef0 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2012-11-08 Eli Zaretskii + + * w32fns.c (modifier_set): Fix handling of Scroll Lock when the + value of w32-scroll-lock-modifier is neither nil nor one of the + known key modifiers. (Bug#12806) + 2012-11-08 Dmitry Antipov Shrink struct vectorlike_header to the only size field. diff --git a/src/w32fns.c b/src/w32fns.c index f4f5aad90b4..bb2abfe0807 100644 --- a/src/w32fns.c +++ b/src/w32fns.c @@ -2085,6 +2085,12 @@ sync_modifiers (void) static int modifier_set (int vkey) { + /* Warning: The fact that VK_NUMLOCK is not treated as the other 2 + toggle keys is not an omission! If you want to add it, you will + have to make changes in the default sub-case of the WM_KEYDOWN + switch, because if the NUMLOCK modifier is set, the code there + will directly convert any key that looks like an ASCII letter, + and also downcase those that look like upper-case ASCII. */ if (vkey == VK_CAPITAL) { if (NILP (Vw32_enable_caps_lock)) @@ -2094,7 +2100,15 @@ modifier_set (int vkey) } if (vkey == VK_SCROLL) { - if (NILP (Vw32_scroll_lock_modifier)) + if (NILP (Vw32_scroll_lock_modifier) + /* w32-scroll-lock-modifier can be any non-nil value that is + not one of the modifiers, in which case it shall be ignored. */ + || !( EQ (Vw32_scroll_lock_modifier, Qhyper) + || EQ (Vw32_scroll_lock_modifier, Qsuper) + || EQ (Vw32_scroll_lock_modifier, Qmeta) + || EQ (Vw32_scroll_lock_modifier, Qalt) + || EQ (Vw32_scroll_lock_modifier, Qcontrol) + || EQ (Vw32_scroll_lock_modifier, Qshift))) return 0; else return (GetKeyState (vkey) & 0x1); -- 2.39.2