[gnome-shell] workspacesView/workspacesDisplay: Don't sync geometry when animating



commit b64103efca366ad017f44be8ab4e5e27e45b2bd3
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Wed Dec 30 19:59:02 2020 -0300

    workspacesView/workspacesDisplay: Don't sync geometry when animating
    
    Synchronizing the actual geometry while animating from / to the overview can
    break the animation. Let's prevent that. This code will go away soon anyway,
    but to not lose bisectability, it's better not to leave it misbehaving until
    then.
    
    Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1613>

 js/ui/workspacesView.js | 11 +++++++++++
 1 file changed, 11 insertions(+)
---
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index 36a15a71ff..ac0729dd07 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -515,6 +515,7 @@ class WorkspacesDisplay extends St.Widget {
 
         this._gestureActive = false; // touch(pad) gestures
         this._canScroll = true; // limiting scrolling speed
+        this._animating = false;
 
         this.connect('destroy', this._onDestroy.bind(this));
     }
@@ -690,6 +691,8 @@ class WorkspacesDisplay extends St.Widget {
     }
 
     animateFromOverview() {
+        this._animating = true;
+
         for (let i = 0; i < this._workspacesViews.length; i++)
             this._workspacesViews[i].animateFromOverview();
 
@@ -703,10 +706,13 @@ class WorkspacesDisplay extends St.Widget {
             x, y, width, height,
             duration: ANIMATION_TIME,
             mode: Clutter.AnimationMode.EASE_OUT_QUAD,
+            onStopped: () => (this._animating = false),
         });
     }
 
     vfunc_hide() {
+        this._animating = false;
+
         if (this._restackedNotifyId > 0) {
             Main.overview.disconnect(this._restackedNotifyId);
             this._restackedNotifyId = 0;
@@ -739,6 +745,8 @@ class WorkspacesDisplay extends St.Widget {
     }
 
     _updateWorkspacesViews() {
+        this._animating = false;
+
         for (let i = 0; i < this._workspacesViews.length; i++)
             this._workspacesViews[i].destroy();
 
@@ -815,6 +823,9 @@ class WorkspacesDisplay extends St.Widget {
 
         this._syncActualGeometryLater =
             Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
+                if (this._animating)
+                    return GLib.SOURCE_CONTINUE;
+
                 this._syncWorkspacesActualGeometry();
 
                 this._syncActualGeometryLater = 0;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]