switcherPopup: Show immediately on second key press

We slightly delay showing the switcher popup to avoid flashing it
briefly in the common case of quickly switching back-and-forth
between two windows.

However some users perceive this delay as slowness. Address this by
showing the popup immediately when another key press is consumed
(that is, a key like Tab is pressed).

https://gitlab.gnome.org/GNOME/gnome-shell/issues/1928
This commit is contained in:
Florian Müllner 2019-11-21 23:40:02 +01:00
parent d5e8f8cdf7
commit 9132063b87

View File

@ -139,15 +139,24 @@ var SwitcherPopup = GObject.registerClass({
GLib.PRIORITY_DEFAULT,
POPUP_DELAY_TIMEOUT,
() => {
Main.osdWindowManager.hideAll();
this.opacity = 255;
this._initialDelayTimeoutId = 0;
this._showImmediately();
return GLib.SOURCE_REMOVE;
});
GLib.Source.set_name_by_id(this._initialDelayTimeoutId, '[gnome-shell] Main.osdWindow.cancel');
return true;
}
_showImmediately() {
if (this._initialDelayTimeoutId === 0)
return;
GLib.source_remove(this._initialDelayTimeoutId);
this._initialDelayTimeoutId = 0;
Main.osdWindowManager.hideAll();
this.opacity = 255;
}
_next() {
return mod(this._selectedIndex + 1, this._items.length);
}
@ -167,8 +176,10 @@ var SwitcherPopup = GObject.registerClass({
this._disableHover();
if (this._keyPressHandler(keysym, action) != Clutter.EVENT_PROPAGATE)
if (this._keyPressHandler(keysym, action) != Clutter.EVENT_PROPAGATE) {
this._showImmediately();
return Clutter.EVENT_STOP;
}
// Note: pressing one of the below keys will destroy the popup only if
// that key is not used by the active popup's keyboard shortcut