summaryrefslogtreecommitdiff
path: root/gdk/win32/gdkevents-win32.c
diff options
context:
space:
mode:
authorTor Lillqvist <tml@novell.com>2005-05-18 14:53:00 +0000
committerTor Lillqvist <tml@src.gnome.org>2005-05-18 14:53:00 +0000
commitba7ee2270a87a0b5f16b047a2135c067a958c226 (patch)
tree10da937e3d06c69115d2bd33c54d22a975f3b9a1 /gdk/win32/gdkevents-win32.c
parentf6906b8272635a0f2f4620675813ff538cde0c73 (diff)
downloadgdk-pixbuf-ba7ee2270a87a0b5f16b047a2135c067a958c226.tar.gz
gdk/win32/gdkevents-win32.c gdk/win32/gdkkeys-win32.c Check the
2005-05-18 Tor Lillqvist <tml@novell.com> * gdk/win32/gdkevents-win32.c * gdk/win32/gdkkeys-win32.c * gdk/win32/gdkprivate-win32.h: Check the KF_EXTENDED bit in lParam of WM_KEY* messages to distinguish between left and right Control and Alt keys. Unfortunately, the right Shift key doesnt set KF_EXTENDED, so to distinguish between left and right Shift keys, check the scan code. (#304584)
Diffstat (limited to 'gdk/win32/gdkevents-win32.c')
-rw-r--r--gdk/win32/gdkevents-win32.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index 222b457c8..47a7eb482 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -2438,6 +2438,26 @@ gdk_event_translate (GdkDisplay *display,
event->key.string = NULL;
event->key.length = 0;
event->key.hardware_keycode = msg->wParam;
+ if (HIWORD (msg->lParam) & KF_EXTENDED)
+ {
+ switch (msg->wParam)
+ {
+ case VK_CONTROL:
+ event->key.hardware_keycode = VK_RCONTROL;
+ break;
+ case VK_SHIFT: /* Actually, KF_EXTENDED is not set
+ * for the right shift key.
+ */
+ event->key.hardware_keycode = VK_RSHIFT;
+ break;
+ case VK_MENU:
+ event->key.hardware_keycode = VK_RMENU;
+ break;
+ }
+ }
+ else if (msg->wParam == VK_SHIFT &&
+ LOBYTE (HIWORD (msg->lParam)) == _scancode_rshift)
+ event->key.hardware_keycode = VK_RSHIFT;
API_CALL (GetKeyboardState, (key_state));