system: Emulate click action button release

Since commit 2c070d38, we add a ClickAction to the visible AltSwitcher
button to track long-presses. As a result, we now have two components
that will grab and ungrab the pointer for the button, so to make sure
we don't end up with a stuck grab, we need to release the second's
component grab when the first activates.

Currently we only drop the StButton grab on long-press, we also need
to cancel any initiated long-press on click.

https://bugzilla.gnome.org/show_bug.cgi?id=781738
This commit is contained in:
Florian Müllner 2017-06-16 17:08:07 +02:00
parent a782de6e06
commit 2339c39ae6

View File

@ -42,9 +42,15 @@ const AltSwitcher = new Lang.Class({
_init: function(standard, alternate) { _init: function(standard, alternate) {
this._standard = standard; this._standard = standard;
this._standard.connect('notify::visible', Lang.bind(this, this._sync)); this._standard.connect('notify::visible', Lang.bind(this, this._sync));
if (this._standard instanceof St.Button)
this._standard.connect('clicked',
() => { this._clickAction.release(); });
this._alternate = alternate; this._alternate = alternate;
this._alternate.connect('notify::visible', Lang.bind(this, this._sync)); this._alternate.connect('notify::visible', Lang.bind(this, this._sync));
if (this._alternate instanceof St.Button)
this._alternate.connect('clicked',
() => { this._clickAction.release(); });
this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent)); this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent));