[gnome-shell] panel: programmatic anim. control of AnimatedIcon
- From: StÃphane DÃmurget <stef src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] panel: programmatic anim. control of AnimatedIcon
- Date: Mon, 5 Nov 2012 14:07:03 +0000 (UTC)
commit e04a4c39231ea1418591446d9b98aad4d7bcd2de
Author: StÃphane DÃmurget <stephane demurget free fr>
Date: Sun Nov 4 19:47:11 2012 +0100
panel: programmatic anim. control of AnimatedIcon
The AnimatedIcon does not have an API for controlling the animation but
relies on the :visible property changes to start and stop a timeout used
to update the frame.
This has the inconvenient of having a side effect when visible is set to
true multiple times, and is not really the API expected from such
component.
Switch to a start/stop API instead. Also, update to the first frame at
startup while we are at it, since this is the expected behavior.
https://bugzilla.gnome.org/show_bug.cgi?id=687583
js/ui/panel.js | 21 +++++++++++----------
1 files changed, 11 insertions(+), 10 deletions(-)
---
diff --git a/js/ui/panel.js b/js/ui/panel.js
index 9f36963..2c3fc89 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();
+ },
+
+ start: function() {
+ if (this._timeoutId == 0)
+ this._timeoutId = Mainloop.timeout_add(ANIMATED_ICON_UPDATE_TIMEOUT, Lang.bind(this, this._update));
},
- _disconnectTimeout: function() {
+ 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();
},
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]