summaryrefslogtreecommitdiff
path: root/gdk/win32/gdkevents-win32.c
diff options
context:
space:
mode:
authorPhilip Zander <philip.zander@gmail.com>2022-01-05 15:44:49 +0100
committerLuca Bacci <luca.bacci982@gmail.com>2022-01-12 19:01:35 +0100
commitea65abc7e2cd056a2c562073664b05faddaf4fad (patch)
treec6c3c25aa3939a0b20554f7eca6279479c0a511c /gdk/win32/gdkevents-win32.c
parent21d40fc0386794a5c4991ce8f5eeba96cdf23884 (diff)
downloadgtk+-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.c28
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;
}