[gnome-shell] appDisplay: Use ::paint handler to set up spring animation



commit c67eabaf62665d7e89471a35111ff66c96322a4c
Author: Florian Müllner <fmuellner gnome org>
Date:   Fri Jun 2 04:22:36 2017 +0200

    appDisplay: Use ::paint handler to set up spring animation
    
    The animation needs the icons' final positions, so we currently defer
    it to a ::notify::allocation handler; however as starting the animation
    during an allocation cycle would trigger a Clutter warning, it is
    further deferred to a MetaLater. While this usually works, it is possible
    that the allocation is already valid when we connect the signal, in which
    case the animation is triggered at a later unexpected time. Switch to
    a more robust ::paint handler instead, which also allows us to get rid
    of the double-delay.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=736148

 js/ui/appDisplay.js |   15 ++++-----------
 1 files changed, 4 insertions(+), 11 deletions(-)
---
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index fe36ded..1cb8303 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -219,17 +219,10 @@ var BaseAppView = new Lang.Class({
         }
 
         if (animationDirection == IconGrid.AnimationDirection.IN) {
-            let toAnimate = this._grid.actor.connect('notify::allocation', Lang.bind(this,
-                function() {
-                    this._grid.actor.disconnect(toAnimate);
-                    // We need to hide the grid temporary to not flash it
-                    // for a frame
-                    this._grid.actor.opacity = 0;
-                    Meta.later_add(Meta.LaterType.BEFORE_REDRAW,
-                                   Lang.bind(this, function() {
-                                       this._doSpringAnimation(animationDirection)
-                                  }));
-                }));
+            let id = this._grid.actor.connect('paint', () => {
+                this._grid.actor.disconnect(id);
+                this._doSpringAnimation(animationDirection);
+            });
         } else {
             this._doSpringAnimation(animationDirection);
         }


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