summaryrefslogtreecommitdiffstats
path: root/winsup
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2017-08-01 14:10:50 +0200
committerCorinna Vinschen <corinna@vinschen.de>2017-08-01 14:10:50 +0200
commit60546ae5299cf8d53d83ba0031e61235413fe535 (patch)
tree8aaae1c5b5c52dd4c8e77d0a8f94bf376c49091e /winsup
parent8c4f86dd8eb9cec63f0c0db193bda80854577557 (diff)
downloadcygnal-60546ae5299cf8d53d83ba0031e61235413fe535.tar.gz
cygnal-60546ae5299cf8d53d83ba0031e61235413fe535.tar.bz2
cygnal-60546ae5299cf8d53d83ba0031e61235413fe535.zip
cygwin: generate Alt-Numpad characters independent of NumLock state
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/miscfuncs.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/winsup/cygwin/miscfuncs.h b/winsup/cygwin/miscfuncs.h
index eb898e645..3960b5429 100644
--- a/winsup/cygwin/miscfuncs.h
+++ b/winsup/cygwin/miscfuncs.h
@@ -20,8 +20,14 @@ details. */
static inline bool
is_alt_numpad_key (PINPUT_RECORD pirec)
{
+ /* Remove lock key state from ControlKeyState. Do not remove enhanced key
+ state since it helps to distinguish between cursor (EK) and numpad keys
+ (non-EK). */
+ DWORD ctrl_state = pirec->Event.KeyEvent.dwControlKeyState
+ & ~(CAPSLOCK_ON | NUMLOCK_ON | SCROLLLOCK_ON);
+
return pirec->Event.KeyEvent.uChar.UnicodeChar == 0
- && pirec->Event.KeyEvent.dwControlKeyState == LEFT_ALT_PRESSED
+ && ctrl_state == LEFT_ALT_PRESSED
&& pirec->Event.KeyEvent.wVirtualScanCode >= DIK_NUMPAD7
&& pirec->Event.KeyEvent.wVirtualScanCode <= DIK_NUMPAD0
&& pirec->Event.KeyEvent.wVirtualScanCode != DIK_SUBTRACT;