From 751b1813c9ee29043c7cbdce05ab39658c9d0127 Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Wed, 18 May 2005 14:47:31 +0000 Subject: [PATCH] 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) --- ChangeLog | 10 ++++++++++ ChangeLog.pre-2-10 | 10 ++++++++++ ChangeLog.pre-2-8 | 10 ++++++++++ gdk/win32/gdkevents-win32.c | 20 ++++++++++++++++++++ gdk/win32/gdkkeys-win32.c | 5 +++++ gdk/win32/gdkprivate-win32.h | 1 + 6 files changed, 56 insertions(+) diff --git a/ChangeLog b/ChangeLog index 8d6592facb..62ec5422ad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +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) + 2005-05-18 Matthias Clasen * gtk/gtkscale.c (gtk_scale_class_init): Fix the default diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 8d6592facb..62ec5422ad 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,13 @@ +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) + 2005-05-18 Matthias Clasen * gtk/gtkscale.c (gtk_scale_class_init): Fix the default diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 8d6592facb..62ec5422ad 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,13 @@ +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) + 2005-05-18 Matthias Clasen * gtk/gtkscale.c (gtk_scale_class_init): Fix the default diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c index bea376d7c9..5eabb994ae 100644 --- a/gdk/win32/gdkevents-win32.c +++ b/gdk/win32/gdkevents-win32.c @@ -2441,6 +2441,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)); diff --git a/gdk/win32/gdkkeys-win32.c b/gdk/win32/gdkkeys-win32.c index c6d051de83..cebd0f5e49 100644 --- a/gdk/win32/gdkkeys-win32.c +++ b/gdk/win32/gdkkeys-win32.c @@ -40,6 +40,8 @@ guint _gdk_keymap_serial = 0; gboolean _gdk_keyboard_has_altgr = FALSE; +guint _scancode_rshift = 0; + static GdkModifierType gdk_shift_modifiers = GDK_SHIFT_MASK; static GdkKeymap *default_keymap = NULL; @@ -357,6 +359,9 @@ update_keymap (void) { gint shift; + if (vk == VK_RSHIFT) + _scancode_rshift = scancode; + key_state[vk] = 0x80; for (shift = 0; shift < 4; shift++) { diff --git a/gdk/win32/gdkprivate-win32.h b/gdk/win32/gdkprivate-win32.h index 6688e6b3cb..ef6aaf2790 100644 --- a/gdk/win32/gdkprivate-win32.h +++ b/gdk/win32/gdkprivate-win32.h @@ -475,6 +475,7 @@ extern UINT _gdk_input_codepage; extern guint _gdk_keymap_serial; extern gboolean _gdk_keyboard_has_altgr; +extern guint _scancode_rshift; /* Registered clipboard formats */ extern WORD _cf_rtf;