gdk/wayland: Don't add GDK_META_MASK to gdk mod masks if MOD1 is set
authorRui Matos <tiagomatos@gmail.com>
Wed, 11 Jan 2017 17:33:11 +0000 (18:33 +0100)
committerBastien Nocera <hadess@hadess.net>
Tue, 17 Jan 2017 17:12:54 +0000 (18:12 +0100)
Gtk+ treats MOD1 as a synonym for Alt, and does not expect it to be
mapped around, so we should avoid adding GDK_META_MASK if MOD1 is
already included to avoid confusing gtk+ and applications that rely on
that behavior.

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

gdk/wayland/gdkkeys-wayland.c

index 085d8e11a4d0077c9a5fa64d0fc5fe6b800e7b5f..9c80d805af7fbe24201a64fb025b59463a6416e7 100644 (file)
@@ -303,7 +303,13 @@ get_gdk_modifiers (struct xkb_keymap *xkb_keymap,
     state |= GDK_SUPER_MASK;
   if (mods & (1 << xkb_keymap_mod_get_index (xkb_keymap, "Hyper")))
     state |= GDK_HYPER_MASK;
-  if (mods & (1 << xkb_keymap_mod_get_index (xkb_keymap, "Meta")))
+  /* Gtk+ treats MOD1 as a synonym for Alt, and does not expect it to
+   * be mapped around, so we should avoid adding GDK_META_MASK if MOD1
+   * is already included to avoid confusing gtk+ and applications that
+   * rely on that behavior.
+   */
+  if (mods & (1 << xkb_keymap_mod_get_index (xkb_keymap, "Meta")) &&
+      (state & GDK_MOD1_MASK) == 0)
     state |= GDK_META_MASK;
 
   return state;