workspacesView: Disable swipe tracker when animating from overview

It was possible to switch workspaces by quickly dragging the workspace
immediately after clicking on a window during the transition from the
overview. This is unlikely something that is intentionally used but can
be confusing and look bad when triggered accidentally.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2993

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1578>
This commit is contained in:
Sebastian Keller 2021-01-13 23:24:49 +01:00 committed by Florian Müllner
parent a5730d7b30
commit c57a299d57

View File

@ -419,6 +419,7 @@ class WorkspacesDisplay extends St.Widget {
this._actualGeometry = null;
this._inWindowDrag = false;
this._inWindowFade = false;
this._leavingOverview = false;
this._gestureActive = false; // touch(pad) gestures
this._canScroll = true; // limiting scrolling speed
@ -467,7 +468,10 @@ class WorkspacesDisplay extends St.Widget {
}
_updateSwipeTracker() {
this._swipeTracker.enabled = this.mapped && !this._inWindowDrag;
this._swipeTracker.enabled =
this.mapped &&
!this._inWindowDrag &&
!this._leavingOverview;
}
_workspacesReordered() {
@ -603,6 +607,9 @@ class WorkspacesDisplay extends St.Widget {
this._inWindowFade = fadeOnPrimary;
this._leavingOverview = true;
this._updateSwipeTracker();
const { primaryIndex } = Main.layoutManager;
const { x, y, width, height } =
Main.layoutManager.getWorkAreaForMonitor(primaryIndex);
@ -630,6 +637,8 @@ class WorkspacesDisplay extends St.Widget {
this._workspacesViews[i].destroy();
this._workspacesViews = [];
this._leavingOverview = false;
super.vfunc_hide();
}