[gnome-shell] Revert "panel: programmatic anim. control of AnimatedIcon"



commit d88002c4ed0be6ac4803563c223bb72da3e8c0b7
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Mon Nov 5 14:31:04 2012 -0500

    Revert "panel: programmatic anim. control of AnimatedIcon"
    
    This reverts commit e04a4c39231ea1418591446d9b98aad4d7bcd2de.
    
    This commit exposed an already-existing race condition in the panel
    animation code that caused the shell to crash for some people.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=687112

 js/ui/panel.js |   21 ++++++++++-----------
 1 files changed, 10 insertions(+), 11 deletions(-)
---
diff --git a/js/ui/panel.js b/js/ui/panel.js
index 2c3fc89..9f36963 100644
--- a/js/ui/panel.js
+++ b/js/ui/panel.js
@@ -82,27 +82,28 @@ const AnimatedIcon = new Lang.Class({
     _init: function(name, size) {
         this.actor = new St.Bin({ visible: false });
         this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
+        this.actor.connect('notify::visible', Lang.bind(this, this._onVisibleNotify));
 
         this._timeoutId = 0;
         this._frame = 0;
         this._animations = St.TextureCache.get_default().load_sliced_image (global.datadir + '/theme/' + name, size, size);
         this.actor.set_child(this._animations);
-
-        this._update();
-    },
-
-    start: function() {
-        if (this._timeoutId == 0)
-            this._timeoutId = Mainloop.timeout_add(ANIMATED_ICON_UPDATE_TIMEOUT, Lang.bind(this, this._update));
     },
 
-    stop: function() {
+    _disconnectTimeout: function() {
         if (this._timeoutId > 0) {
             Mainloop.source_remove(this._timeoutId);
             this._timeoutId = 0;
         }
     },
 
+    _onVisibleNotify: function() {
+        if (this.actor.visible)
+            this._timeoutId = Mainloop.timeout_add(ANIMATED_ICON_UPDATE_TIMEOUT, Lang.bind(this, this._update));
+        else
+            this._disconnectTimeout();
+    },
+
     _showFrame: function(frame) {
         let oldFrameActor = this._animations.get_child_at_index(this._frame);
         if (oldFrameActor)
@@ -121,7 +122,7 @@ const AnimatedIcon = new Lang.Class({
     },
 
     _onDestroy: function() {
-        this.stop();
+        this._disconnectTimeout();
     }
 });
 
@@ -366,7 +367,6 @@ const AppMenuButton = new Lang.Class({
                            transition: "easeOutQuad",
                            onCompleteScope: this,
                            onComplete: function() {
-                               this._spinner.stop();
                                this._spinner.actor.opacity = 255;
                                this._spinner.actor.hide();
                            }
@@ -376,7 +376,6 @@ const AppMenuButton = new Lang.Class({
     startAnimation: function() {
         this._stop = false;
         this.actor.reactive = false;
-        this._spinner.start();
         this._spinner.actor.show();
     },
 



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