[gnome-shell] [AppIcon] Keep glow up to date directly
- From: Colin Walters <walters src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-shell] [AppIcon] Keep glow up to date directly
- Date: Fri, 23 Oct 2009 15:29:31 +0000 (UTC)
commit 0c37a5bd6f38208700534e327da90da2b6cb3aa1
Author: Colin Walters <walters verbum org>
Date: Fri Oct 23 10:57:55 2009 -0400
[AppIcon] Keep glow up to date directly
AppWell was changed to only do updates on application running state
changes, so we need to update the glow on window count changes.
https://bugzilla.gnome.org/show_bug.cgi?id=599412
js/ui/appIcon.js | 40 ++++++++++++++++++++++++++++------------
1 files changed, 28 insertions(+), 12 deletions(-)
---
diff --git a/js/ui/appIcon.js b/js/ui/appIcon.js
index b0a37b6..b2cc8af 100644
--- a/js/ui/appIcon.js
+++ b/js/ui/appIcon.js
@@ -62,7 +62,7 @@ AppIcon.prototype = {
this._menuType = ('menuType' in params) ? params.menuType : MenuType.NONE;
this._iconSize = ('size' in params) ? params.size : APPICON_DEFAULT_ICON_SIZE;
- let showGlow = ('glow' in params) ? params.glow : false;
+ this._showGlow = ('glow' in params) ? params.glow : false;
this.actor = new Shell.ButtonBox({ orientation: Big.BoxOrientation.VERTICAL,
border: APPICON_BORDER_WIDTH,
@@ -70,6 +70,8 @@ AppIcon.prototype = {
padding: APPICON_PADDING,
reactive: true });
this.actor._delegate = this;
+ this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
+
this.highlight_border_color = APPICON_DEFAULT_BORDER_COLOR;
if (this._menuType != MenuType.NONE) {
@@ -103,21 +105,16 @@ AppIcon.prototype = {
ellipsize: Pango.EllipsizeMode.END,
text: this.app.get_name() });
nameBox.add_actor(this._name);
- if (showGlow) {
+ if (this._showGlow) {
this._glowBox = new Big.Box({ orientation: Big.BoxOrientation.HORIZONTAL });
- let glowPath = GLib.filename_to_uri(global.imagedir + 'app-well-glow.png', '');
- let windows = this.app.get_windows();
- for (let i = 0; i < windows.length && i < 3; i++) {
- let glow = Shell.TextureCache.get_default().load_uri_sync(Shell.TextureCachePolicy.FOREVER,
- glowPath, -1, -1);
- glow.keep_aspect_ratio = false;
- this._glowBox.append(glow, Big.BoxPackFlags.EXPAND);
- }
this._nameBox.add_actor(this._glowBox);
this._glowBox.lower(this._name);
- }
- else
+ this._appWindowChangedId = this.app.connect('windows-changed', Lang.bind(this, this._rerenderGlow));
+ this._rerenderGlow();
+ } else {
this._glowBox = null;
+ this._appWindowChangedId = 0;
+ }
this.actor.append(nameBox, Big.BoxPackFlags.NONE);
},
@@ -163,6 +160,25 @@ AppIcon.prototype = {
}
},
+ _onDestroy: function() {
+ if (this._appWindowChangedId > 0)
+ this.app.disconnect(this._appWindowChangedId);
+ },
+
+ _rerenderGlow: function() {
+ if (!this._showGlow)
+ return;
+ this._glowBox.get_children().forEach(function (a) { a.destroy(); });
+ let glowPath = GLib.filename_to_uri(global.imagedir + 'app-well-glow.png', '');
+ let windows = this.app.get_windows();
+ for (let i = 0; i < windows.length && i < 3; i++) {
+ let glow = Shell.TextureCache.get_default().load_uri_sync(Shell.TextureCachePolicy.FOREVER,
+ glowPath, -1, -1);
+ glow.keep_aspect_ratio = false;
+ this._glowBox.append(glow, Big.BoxPackFlags.EXPAND);
+ }
+ },
+
// AppIcon itself is not a draggable, but if you want to make
// a subclass of it draggable, you can use this method to create
// a drag actor
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]