gdk/wayland: Always get the seat's key modifiers from the GdkKeymap
authorRui Matos <tiagomatos@gmail.com>
Wed, 11 Jan 2017 18:12:12 +0000 (19:12 +0100)
committerBastien Nocera <hadess@hadess.net>
Tue, 17 Jan 2017 17:12:54 +0000 (18:12 +0100)
Elsewhere we already go through the keymap to get modifiers so we
should do the same here. In fact, this was relying on xkb modifier
mask values being bitwise compatible with GdkModifierType which isn't
necessarily true.

https://bugzilla.gnome.org/show_bug.cgi?id=770112

gdk/wayland/gdkdevice-wayland.c

index 2de1daf39e1193800a8ae753537ddfac8dfe54ff..9bc3477db046a7a30f1b4ee6d1205fcc9316f4c4 100644 (file)
@@ -2233,10 +2233,11 @@ keyboard_handle_modifiers (void               *data,
   keymap = seat->keymap;
   direction = gdk_keymap_get_direction (keymap);
   xkb_state = _gdk_wayland_keymap_get_xkb_state (keymap);
-  seat->key_modifiers = mods_depressed | mods_latched | mods_locked;
 
   xkb_state_update_mask (xkb_state, mods_depressed, mods_latched, mods_locked, group, 0, 0);
 
+  seat->key_modifiers = gdk_keymap_get_modifier_state (keymap);
+
   g_signal_emit_by_name (keymap, "state-changed");
   if (direction != gdk_keymap_get_direction (keymap))
     g_signal_emit_by_name (keymap, "direction-changed");