diff --git a/js/ui/panel.js b/js/ui/panel.js index 2c3fc89a6..9f3696346 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(); },