summaryrefslogtreecommitdiffstats
path: root/win/tkWinKey.c
diff options
context:
space:
mode:
authorfvogel <fvogelnew1@free.fr>2016-09-04 18:46:04 (GMT)
committerfvogel <fvogelnew1@free.fr>2016-09-04 18:46:04 (GMT)
commit571a9ffc9dec8cbd9963a3c826b1467dc3997b77 (patch)
treef73c87e7641058fc3c32dbf57ff6082f7370a9c1 /win/tkWinKey.c
parente90e5d25d13df3de728ef5ed909ebd39c631bc65 (diff)
parent4fa07b0a11a1de74bd15b1ae9dcec8be210fcd34 (diff)
downloadtk-571a9ffc9dec8cbd9963a3c826b1467dc3997b77.zip
tk-571a9ffc9dec8cbd9963a3c826b1467dc3997b77.tar.gz
tk-571a9ffc9dec8cbd9963a3c826b1467dc3997b77.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.c30
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];