[gnome-shell] animation: Stop the animation before removing all the children



commit ea4d5f89eb01c4cb4ec92840adef576cf13af0f9
Author: Marco Trevisan (Treviño) <mail 3v1n0 net>
Date:   Fri Jun 14 17:48:16 2019 +0300

    animation: Stop the animation before removing all the children
    
    If the resource scale or the scale factor changes while the animation
    is playing, we need to stop the animation and start it again once the
    texture is loaded, as the idle might try to access an invalidated
    animation child otherwise.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/700

 js/ui/animation.js | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)
---
diff --git a/js/ui/animation.js b/js/ui/animation.js
index d66eaa4044..528fb8220f 100644
--- a/js/ui/animation.js
+++ b/js/ui/animation.js
@@ -54,12 +54,19 @@ var Animation = class {
 
     _loadFile(file, width, height) {
         let [validResourceScale, resourceScale] = this.actor.get_resource_scale();
+        let wasPlaying = this._isPlaying;
+
+        if (this._isPlaying)
+            this.stop();
 
         this._isLoaded = false;
         this.actor.destroy_all_children();
 
-        if (!validResourceScale)
+        if (!validResourceScale) {
+            if (wasPlaying)
+                this.play();
             return;
+        }
 
         let textureCache = St.TextureCache.get_default();
         let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor;
@@ -67,6 +74,9 @@ var Animation = class {
                                                           scaleFactor, resourceScale,
                                                           this._animationsLoaded.bind(this));
         this.actor.set_child(this._animations);
+
+        if (wasPlaying)
+            this.play();
     }
 
     _showFrame(frame) {


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