diff options
author | fvogel <fvogelnew1@free.fr> | 2016-09-04 18:46:23 (GMT) |
---|---|---|
committer | fvogel <fvogelnew1@free.fr> | 2016-09-04 18:46:23 (GMT) |
commit | bc21ab428d0c3384814b486290a3a89917519c42 (patch) | |
tree | 50e115ae56b2c3ecf43619ef8cfd226bea3bee84 /win/tkWinKey.c | |
parent | a288981499a40b3ee18dbe60a6c9209c0837d4f7 (diff) | |
parent | 571a9ffc9dec8cbd9963a3c826b1467dc3997b77 (diff) | |
download | tk-bc21ab428d0c3384814b486290a3a89917519c42.zip tk-bc21ab428d0c3384814b486290a3a89917519c42.tar.gz tk-bc21ab428d0c3384814b486290a3a89917519c42.tar.bz2 |
Fixed [2945130fff] for the right Control and Alt keys. WONTFIX the case of the right Shift key due to Windows plaftorm limitation.
Diffstat (limited to 'win/tkWinKey.c')
-rw-r--r-- | win/tkWinKey.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/win/tkWinKey.c b/win/tkWinKey.c index 5591133..3d2a16a 100644 --- a/win/tkWinKey.c +++ b/win/tkWinKey.c @@ -335,18 +335,24 @@ KeycodeToKeysym( /* * Windows only gives us an undifferentiated VK_CONTROL code (for * example) when either Control key is pressed. To distinguish between - * left and right, we have to query the state of one of the two to - * determine which was actually pressed. So if the keycode indicates - * Control, Shift, or Menu (the key that everybody else calls Alt), do - * this extra test. If the right-side key was pressed, return the - * appropriate keycode. Otherwise, we fall through and rely on the - * keymap table to hold the correct keysym value. + * left and right, we use the Extended flag. Indeed, the right Control + * and Alt (aka Menu) keys are such extended keys (which their left + * counterparts are not). + * Regarding the shift case, Windows does not set the Extended flag for + * the neither the left nor the right shift key. As a consequence another + * way to distinguish between the two keys is to query the state of one + * of the two to determine which was actually pressed. So if the keycode + * indicates Shift, do this extra test. If the right-side key was + * pressed, return the appropriate keycode. Otherwise, we fall through + * and rely on the keymap table to hold the correct keysym value. + * Note: this little trick only works for KeyPress, not for KeyRelease, + * for reasons stated in bug [2945130] */ case VK_CONTROL: - if (GetKeyState(VK_RCONTROL) & 0x80) { - return XK_Control_R; - } + if (state & EXTENDED_MASK) { + return XK_Control_R; + } break; case VK_SHIFT: if (GetKeyState(VK_RSHIFT) & 0x80) { @@ -354,9 +360,9 @@ KeycodeToKeysym( } break; case VK_MENU: - if (GetKeyState(VK_RMENU) & 0x80) { - return XK_Alt_R; - } + if (state & EXTENDED_MASK) { + return XK_Alt_R; + } break; } return keymap[keycode]; |