[gnome-shell/wip/jimmac/dash-icon-spacing: 19/72] workspacesView/workspacesDisplay: Don't sync geometry when animating




commit a6d685343c7220bd83daf123f7354b2fce3a98e6
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 it's better not to leave it misbehaving until then.

 js/ui/workspacesView.js | 11 +++++++++++
 1 file changed, 11 insertions(+)
---
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index 287ed74985..47180d3e0d 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -495,6 +495,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));
     }
@@ -691,6 +692,8 @@ class WorkspacesDisplay extends St.Widget {
     }
 
     animateFromOverview() {
+        this._animating = true;
+
         for (let i = 0; i < this._workspacesViews.length; i++)
             this._workspacesViews[i].animateFromOverview();
 
@@ -704,10 +707,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;
@@ -740,6 +746,8 @@ class WorkspacesDisplay extends St.Widget {
     }
 
     _updateWorkspacesViews() {
+        this._animating = false;
+
         for (let i = 0; i < this._workspacesViews.length; i++)
             this._workspacesViews[i].destroy();
 
@@ -816,6 +824,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]