summaryrefslogtreecommitdiff
path: root/gdk/win32/gdkevents-win32.c
diff options
context:
space:
mode:
authorLuca Bacci <luca.bacci982@gmail.com>2022-01-14 19:26:07 +0100
committerLuca Bacci <luca.bacci982@gmail.com>2022-01-17 14:14:55 +0100
commit243bb57a27270dad2513e8a60e2da10c472b46f6 (patch)
treef95176dfbd20c53b895df7bbc74214daf2de79ad /gdk/win32/gdkevents-win32.c
parent4916ebd05e10ca5bbb28d351267bb954809b6207 (diff)
downloadgtk+-243bb57a27270dad2513e8a60e2da10c472b46f6.tar.gz
GdkWin32: Add translation result w/o CAPS LOCK to key events for accelerator matching
Diffstat (limited to 'gdk/win32/gdkevents-win32.c')
-rw-r--r--gdk/win32/gdkevents-win32.c43
1 files changed, 26 insertions, 17 deletions
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index 2c3dc5c6ae..a004714266 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -1899,13 +1899,12 @@ gdk_event_translate (MSG *msg,
{
GdkWin32Keymap *win32_keymap;
GdkModifierType state;
- GdkModifierType consumed_modifiers;
guint keyval;
guint16 keycode;
guint8 group;
- int level;
gboolean is_modifier;
GdkTranslatedKey translated;
+ GdkTranslatedKey no_lock;
BYTE key_state[256];
wchar_t wbuf[100];
int ccount = 0;
@@ -2008,18 +2007,33 @@ gdk_event_translate (MSG *msg,
keyval = gdk_unicode_to_keyval (wbuf[0]);
}
- /* TODO: What values to use for level and consumed_modifiers? */
- level = 0;
- consumed_modifiers = 0;
+ translated.keyval = keyval;
+ translated.consumed = 0;
+ translated.layout = 0;
+ translated.level = 0;
+
+ no_lock = translated;
}
else
{
- gdk_keymap_translate_keyboard_state ((GdkKeymap*)win32_keymap,
- keycode,
- state,
- group,
- &keyval,
- NULL, &level, &consumed_modifiers);
+ int level = 0;
+ int effective_group = 0;
+ GdkModifierType consumed = 0;
+
+ gdk_keymap_translate_keyboard_state ((GdkKeymap*) win32_keymap, keycode, state, group,
+ &keyval, &effective_group, &level, &consumed);
+ translated.keyval = keyval;
+ translated.consumed = consumed;
+ translated.layout = effective_group;
+ translated.level = level;
+
+ gdk_keymap_translate_keyboard_state ((GdkKeymap*) win32_keymap, keycode,
+ state & ~GDK_LOCK_MASK, group, &keyval,
+ &effective_group, &level, &consumed);
+ no_lock.keyval = keyval;
+ no_lock.consumed = consumed;
+ no_lock.layout = effective_group;
+ no_lock.level = level;
}
if (msg->message == WM_KEYDOWN)
@@ -2063,11 +2077,6 @@ gdk_event_translate (MSG *msg,
if (msg->wParam == VK_MENU)
state &= ~GDK_ALT_MASK;
- translated.keyval = keyval;
- translated.consumed = consumed_modifiers;
- translated.layout = group;
- translated.level = level;
-
event = gdk_key_event_new ((msg->message == WM_KEYDOWN || msg->message == WM_SYSKEYDOWN)
? GDK_KEY_PRESS
: GDK_KEY_RELEASE,
@@ -2078,7 +2087,7 @@ gdk_event_translate (MSG *msg,
state,
is_modifier,
&translated,
- &translated);
+ &no_lock);
_gdk_win32_append_event (event);