From c67eabaf62665d7e89471a35111ff66c96322a4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 2 Jun 2017 04:22:36 +0200 Subject: [PATCH] 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 file changed, 4 insertions(+), 11 deletions(-) diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index fe36deded..1cb830372 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); }