diff --git a/js/ui/altTab.js b/js/ui/altTab.js index 532c20a5b..f3d3d6a1a 100644 --- a/js/ui/altTab.js +++ b/js/ui/altTab.js @@ -158,7 +158,7 @@ AltTabPopup.prototype = { // https://bugzilla.gnome.org/show_bug.cgi?id=596695 for // details.) So we check now. (Have to do this after calling // _updateSelection.) - let [screen, x, y, mods] = Gdk.Display.get_default().get_pointer(); + let mods = global.get_modifier_keys(); if (!(mods & Gdk.ModifierType.MOD1_MASK)) { this._finish(); return false; diff --git a/src/shell-global.c b/src/shell-global.c index 96e1c3c50..65688e728 100644 --- a/src/shell-global.c +++ b/src/shell-global.c @@ -978,3 +978,23 @@ shell_global_get_focus_monitor (ShellGlobal *global) meta_screen_get_monitor_geometry (screen, 0, &rect); return g_boxed_copy (GDK_TYPE_RECTANGLE, &rect); } + +/** + * shell_global_get_modifier_keys: + * @global: the #ShellGlobal + * + * Gets the current set of modifier keys that are pressed down; + * this is a wrapper around gdk_display_get_pointer() that strips + * out any un-declared modifier flags, to make gjs happy; see + * https://bugzilla.gnome.org/show_bug.cgi?id=597292. + * + * Return value: the current modifiers + */ +GdkModifierType +shell_global_get_modifier_keys (ShellGlobal *global) +{ + GdkModifierType mods; + + gdk_display_get_pointer (gdk_display_get_default (), NULL, NULL, NULL, &mods); + return mods & GDK_MODIFIER_MASK; +} diff --git a/src/shell-global.h b/src/shell-global.h index ca389ced1..fe01aeb3d 100644 --- a/src/shell-global.h +++ b/src/shell-global.h @@ -77,6 +77,8 @@ GSList *shell_global_get_monitors (ShellGlobal *global); GdkRectangle *shell_global_get_primary_monitor (ShellGlobal *global); GdkRectangle *shell_global_get_focus_monitor (ShellGlobal *global); +GdkModifierType shell_global_get_modifier_keys (ShellGlobal *global); + G_END_DECLS #endif /* __SHELL_GLOBAL_H__ */