diff --git a/js/ui/panel.js b/js/ui/panel.js index 9f3696346..2c3fc89a6 100644 --- a/js/ui/panel.js +++ b/js/ui/panel.js @@ -82,28 +82,27 @@ 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(); }, - _disconnectTimeout: function() { + start: function() { + if (this._timeoutId == 0) + this._timeoutId = Mainloop.timeout_add(ANIMATED_ICON_UPDATE_TIMEOUT, Lang.bind(this, this._update)); + }, + + stop: 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) @@ -122,7 +121,7 @@ const AnimatedIcon = new Lang.Class({ }, _onDestroy: function() { - this._disconnectTimeout(); + this.stop(); } }); @@ -367,6 +366,7 @@ const AppMenuButton = new Lang.Class({ transition: "easeOutQuad", onCompleteScope: this, onComplete: function() { + this._spinner.stop(); this._spinner.actor.opacity = 255; this._spinner.actor.hide(); } @@ -376,6 +376,7 @@ const AppMenuButton = new Lang.Class({ startAnimation: function() { this._stop = false; this.actor.reactive = false; + this._spinner.start(); this._spinner.actor.show(); },