[AppSwitcher] deal with the user releasing Alt before we get the grab
Previously mutter was doing this for us, but now we need to do it ourselves. https://bugzilla.gnome.org/show_bug.cgi?id=596695
This commit is contained in:
parent
84a6a6faf0
commit
373fa3c325
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
const Big = imports.gi.Big;
|
const Big = imports.gi.Big;
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
|
const Gdk = imports.gi.Gdk;
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Meta = imports.gi.Meta;
|
const Meta = imports.gi.Meta;
|
||||||
const Pango = imports.gi.Pango;
|
const Pango = imports.gi.Pango;
|
||||||
@ -117,6 +118,18 @@ AltTabPopup.prototype = {
|
|||||||
this.actor.y = Math.floor((global.screen_height - this.actor.height) / 2);
|
this.actor.y = Math.floor((global.screen_height - this.actor.height) / 2);
|
||||||
|
|
||||||
this._updateSelection(initialSelection);
|
this._updateSelection(initialSelection);
|
||||||
|
|
||||||
|
// There's a race condition; if the user released Alt before
|
||||||
|
// we got the grab, then we won't be notified. (See
|
||||||
|
// 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();
|
||||||
|
if (!(mods & Gdk.ModifierType.MOD1_MASK)) {
|
||||||
|
this._finish();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -161,11 +174,8 @@ AltTabPopup.prototype = {
|
|||||||
_keyReleaseEvent : function(actor, event) {
|
_keyReleaseEvent : function(actor, event) {
|
||||||
let keysym = event.get_key_symbol();
|
let keysym = event.get_key_symbol();
|
||||||
|
|
||||||
if (keysym == Clutter.Alt_L || keysym == Clutter.Alt_R) {
|
if (keysym == Clutter.Alt_L || keysym == Clutter.Alt_R)
|
||||||
if (this._highlightedWindow)
|
this._finish();
|
||||||
Main.activateWindow(this._highlightedWindow, event.get_time());
|
|
||||||
this.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
@ -209,6 +219,12 @@ AltTabPopup.prototype = {
|
|||||||
this._updateSelection(index - this._selected);
|
this._updateSelection(index - this._selected);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_finish : function() {
|
||||||
|
if (this._highlightedWindow)
|
||||||
|
Main.activateWindow(this._highlightedWindow);
|
||||||
|
this.destroy();
|
||||||
|
},
|
||||||
|
|
||||||
destroy : function() {
|
destroy : function() {
|
||||||
this.actor.destroy();
|
this.actor.destroy();
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user