overviewControls: Support double-super when animations are off

When super is pressed again during the overview transition, we shift
up to the app grid. That means that the feature currently doesn't
work when animations are disabled (like in a VM), because there is
no transition in that case.

Address this by adding a time-based fallback in that case, i.e.
shift up when a second super-press occurs within 250ms after the
first one.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4121

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1811>
This commit is contained in:
Florian Müllner 2021-04-15 12:00:12 +02:00 committed by Marge Bot
parent d823141360
commit 28723ac088

View File

@ -1,7 +1,7 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
/* exported ControlsManager */
const { Clutter, Gio, GObject, Meta, Shell, St } = imports.gi;
const { Clutter, Gio, GLib, GObject, Meta, Shell, St } = imports.gi;
const AppDisplay = imports.ui.appDisplay;
const Dash = imports.ui.dash;
@ -407,6 +407,7 @@ class ControlsManager extends St.Widget {
this._a11ySettings = new Gio.Settings({ schema_id: A11Y_SCHEMA });
this._lastOverlayKeyTime = 0;
global.display.connect('overlay-key', () => {
if (this._a11ySettings.get_boolean('stickykeys-enable'))
return;
@ -414,7 +415,15 @@ class ControlsManager extends St.Widget {
const { initialState, finalState, transitioning } =
this._stateAdjustment.getStateTransitionParams();
if (transitioning && finalState > initialState)
const time = GLib.get_monotonic_time() / 1000;
const timeDiff = time - this._lastOverlayKeyTime;
this._lastOverlayKeyTime = time;
const shouldShift = St.Settings.get().enable_animations
? transitioning && finalState > initialState
: Main.overview.visible && timeDiff < Overview.ANIMATION_TIME;
if (shouldShift)
this._shiftState(Meta.MotionDirection.UP);
else
Main.overview.toggle();