diff options
author | Philip Zander <philip.zander@gmail.com> | 2022-01-05 15:44:49 +0100 |
---|---|---|
committer | Luca Bacci <luca.bacci982@gmail.com> | 2022-01-12 19:01:35 +0100 |
commit | ea65abc7e2cd056a2c562073664b05faddaf4fad (patch) | |
tree | c6c3c25aa3939a0b20554f7eca6279479c0a511c /gdk/win32/gdkevents-win32.c | |
parent | 21d40fc0386794a5c4991ce8f5eeba96cdf23884 (diff) | |
download | gtk+-ea65abc7e2cd056a2c562073664b05faddaf4fad.tar.gz |
Rewrite GdkWin32Keymap (load table directly from layout DLL)
The old code used repeated calls to `ToUnicodeEx` to populate
the translation table, which is slow and buggy. The new code
directly loads the layout driver DLLs from Windows.
See https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/4338
Diffstat (limited to 'gdk/win32/gdkevents-win32.c')
-rw-r--r-- | gdk/win32/gdkevents-win32.c | 28 |
1 files changed, 3 insertions, 25 deletions
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c index bc7590aa13..9e752d12f5 100644 --- a/gdk/win32/gdkevents-win32.c +++ b/gdk/win32/gdkevents-win32.c @@ -19,7 +19,7 @@ */ /* - * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS + * Modified by the GTK+ Team and others 1997-2020. See the AUTHORS * file for a list of people on the GTK+ Team. See the ChangeLog * files for a list of changes. These files are distributed with * GTK+ at ftp://ftp.gtk.org/pub/gtk/. @@ -644,11 +644,9 @@ build_key_event_state (BYTE *key_state) { GdkModifierType state; GdkWin32Keymap *keymap; + keymap = GDK_WIN32_KEYMAP (_gdk_win32_display_get_keymap (_gdk_display)); - state = 0; - - if (key_state[VK_SHIFT] & 0x80) - state |= GDK_SHIFT_MASK; + state = _gdk_win32_keymap_get_mod_mask (keymap); if (key_state[VK_CAPITAL] & 0x01) state |= GDK_LOCK_MASK; @@ -664,26 +662,6 @@ build_key_event_state (BYTE *key_state) if (key_state[VK_XBUTTON2] & 0x80) state |= GDK_BUTTON5_MASK; - keymap = GDK_WIN32_KEYMAP (_gdk_win32_display_get_keymap (_gdk_display)); - - if (_gdk_win32_keymap_has_altgr (keymap) && - (key_state[VK_LCONTROL] & 0x80) && - (key_state[VK_RMENU] & 0x80)) - { - state |= GDK_MOD2_MASK; - if (key_state[VK_RCONTROL] & 0x80) - state |= GDK_CONTROL_MASK; - if (key_state[VK_LMENU] & 0x80) - state |= GDK_ALT_MASK; - } - else - { - if (key_state[VK_CONTROL] & 0x80) - state |= GDK_CONTROL_MASK; - if (key_state[VK_MENU] & 0x80) - state |= GDK_ALT_MASK; - } - return state; } |