gdk/wayland: Don't add GDK_META_MASK to gdk mod masks if MOD1 is set

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
This commit is contained in:
Rui Matos 2017-01-11 18:33:11 +01:00 committed by Bastien Nocera
parent 7ca6d7585f
commit 515b71f14c

View 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;