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