From ba7ee2270a87a0b5f16b047a2135c067a958c226 Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Wed, 18 May 2005 14:53:00 +0000 Subject: gdk/win32/gdkevents-win32.c gdk/win32/gdkkeys-win32.c Check the 2005-05-18 Tor Lillqvist * 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) --- gdk/win32/gdkevents-win32.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'gdk/win32/gdkevents-win32.c') 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)); -- cgit v1.2.1