panelMenu: Interact to touch events

No sequence checks are done, these UI elements promptly trigger a grab that
will cancel ongoing touches and redirect later ones somewhere else, so that
works as a barrier to multi-toggling.

https://bugzilla.gnome.org/show_bug.cgi?id=733633
This commit is contained in:
Carlos Garnacho 2014-07-22 12:28:00 +02:00
parent da26a9daf8
commit e545ec59b9

View File

@ -100,7 +100,7 @@ const Button = new Lang.Class({
accessible_name: nameText ? nameText : "", accessible_name: nameText ? nameText : "",
accessible_role: Atk.Role.MENU }); accessible_role: Atk.Role.MENU });
this.actor.connect('button-press-event', Lang.bind(this, this._onButtonPress)); this.actor.connect('event', Lang.bind(this, this._onEvent));
this.actor.connect('key-press-event', Lang.bind(this, this._onSourceKeyPress)); this.actor.connect('key-press-event', Lang.bind(this, this._onSourceKeyPress));
this.actor.connect('notify::visible', Lang.bind(this, this._onVisibilityChanged)); this.actor.connect('notify::visible', Lang.bind(this, this._onVisibilityChanged));
@ -131,11 +131,12 @@ const Button = new Lang.Class({
} }
}, },
_onButtonPress: function(actor, event) { _onEvent: function(actor, event) {
if (!this.menu) if (this.menu &&
return Clutter.EVENT_PROPAGATE; (event.type() == Clutter.EventType.TOUCH_BEGIN ||
event.type() == Clutter.EventType.BUTTON_PRESS))
this.menu.toggle();
this.menu.toggle();
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}, },