popupMenu: Don't handle key presses directly if there are modifiers

Key events involved in a keyboard shortcut are not completely consumed by
Mutter. That means that if the popupMenu is bound to a shortcut (e.g.
Alt<Space>) and the user keeps the keys pressed, the same key-event will be
delivered to the popupMenu. We can workaround this issue filtering out all the
events where a a modifier is down (except capslock).

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/372


(cherry picked from commit 2e90c5fa4b)
This commit is contained in:
Andrea Azzarone 2018-06-21 16:40:43 +00:00 committed by Marco Trevisan
parent fddd122956
commit 445eed40a7

View File

@ -141,8 +141,17 @@ var PopupBaseMenuItem = new Lang.Class({
}, },
_onKeyPressEvent(actor, event) { _onKeyPressEvent(actor, event) {
let symbol = event.get_key_symbol(); let state = event.get_state();
// if user has a modifier down (except capslock)
// then don't handle the key press here
state &= ~Clutter.ModifierType.LOCK_MASK;
state &= Clutter.ModifierType.MODIFIER_MASK;
if (state)
return Clutter.EVENT_PROPAGATE;
let symbol = event.get_key_symbol();
if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) { if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
this.activate(event); this.activate(event);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;