[gnome-shell/screen-shield-next: 6/9] messageTray: Hook SourceActor up to source icon changes automatically
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/screen-shield-next: 6/9] messageTray: Hook SourceActor up to source icon changes automatically
- Date: Mon, 6 Aug 2012 19:46:59 +0000 (UTC)
commit 5cb9aa9cf3f424b7354cfd33af97a0d1be7b5392
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Mon Jul 23 01:07:51 2012 -0300
messageTray: Hook SourceActor up to source icon changes automatically
Instead of manually tracking source icon changes, or requiring a manual
call to _setSummaryIcon, add a way to emit a signal when we're guaranteed
the icon has been changed, and then the source actor will automatically
update the icon.
_setSummaryIcon is still available for sources such as the notification
daemon, that require special treatment for the summary icon (to be used
with tray icons)
https://bugzilla.gnome.org/show_bug.cgi?id=680426
js/ui/messageTray.js | 21 +++++++++++++++++++--
js/ui/notificationDaemon.js | 5 +++--
js/ui/screenShield.js | 2 --
js/ui/telepathyClient.js | 2 +-
4 files changed, 23 insertions(+), 7 deletions(-)
---
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index d7b7647..cde3e95 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -1039,6 +1039,7 @@ const SourceActor = new Lang.Class({
_init: function(source, size) {
this._source = source;
+ this._size = size;
this.actor = new Shell.GenericContainer();
this.actor.connect('get-preferred-width', Lang.bind(this, this._getPreferredWidth));
@@ -1064,10 +1065,14 @@ const SourceActor = new Lang.Class({
this._source.connect('count-changed', Lang.bind(this, this._updateCount));
this._updateCount();
+
+ this._source.connect('icon-updated', Lang.bind(this, this._updateIcon));
+ this._updateIcon();
},
setIcon: function(icon) {
this._iconBin.child = icon;
+ this._iconSet = true;
},
_getPreferredWidth: function (actor, forHeight, alloc) {
@@ -1105,13 +1110,21 @@ const SourceActor = new Lang.Class({
this._counterBin.allocate(childBox, flags);
},
+ _updateIcon: function() {
+ if (this._actorDestroyed)
+ return;
+
+ if (!this._iconSet)
+ this._iconBin.child = this._source.createIcon(this._size);
+ },
+
_updateCount: function() {
if (this._actorDestroyed)
return;
this._counterBin.visible = this._source.countVisible;
this._counterLabel.set_text(this._source.count.toString());
- },
+ }
});
const Source = new Lang.Class({
@@ -1133,7 +1146,6 @@ const Source = new Lang.Class({
this.notifications = [];
this.mainIcon = new SourceActor(this, this.ICON_SIZE);
- this._setSummaryIcon(this.createIcon(this.ICON_SIZE));
},
_setCount: function(count, visible) {
@@ -1222,9 +1234,14 @@ const Source = new Lang.Class({
return false;
},
+ iconUpdated: function() {
+ this.emit('icon-updated');
+ },
+
//// Protected methods ////
_setSummaryIcon: function(icon) {
this.mainIcon.setIcon(icon);
+ this.iconUpdated();
},
open: function(notification) {
diff --git a/js/ui/notificationDaemon.js b/js/ui/notificationDaemon.js
index 8fdb9e0..4c7a640 100644
--- a/js/ui/notificationDaemon.js
+++ b/js/ui/notificationDaemon.js
@@ -557,7 +557,8 @@ const Source = new Lang.Class({
processNotification: function(notification, gicon) {
if (gicon)
this._gicon = gicon;
- this._setSummaryIcon(this.createIcon(this.ICON_SIZE));
+ if (!this.trayIcon)
+ this.iconUpdated();
let tracker = Shell.WindowTracker.get_default();
if (notification.resident && this.app && tracker.focus_app == this.app)
@@ -625,7 +626,7 @@ const Source = new Lang.Class({
// notification-based icons (ie, not a trayicon) or if it was unset before
if (!this.trayIcon) {
this.useNotificationIcon = false;
- this._setSummaryIcon(this.createIcon(this.ICON_SIZE));
+ this.iconUpdated();
}
},
diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
index fe6d511..88a6bd4 100644
--- a/js/ui/screenShield.js
+++ b/js/ui/screenShield.js
@@ -134,9 +134,7 @@ const NotificationsBox = new Lang.Class({
_makeNotificationSource: function(source) {
let box = new St.BoxLayout({ style_class: 'screen-shield-notification-source' });
- let iconClone = source.createIcon(SUMMARY_ICON_SIZE);
let sourceActor = new MessageTray.SourceActor(source, SUMMARY_ICON_SIZE);
- sourceActor.setIcon(iconClone);
box.add(sourceActor.actor, { y_fill: true });
let textBox = new St.BoxLayout({ vertical: true });
diff --git a/js/ui/telepathyClient.js b/js/ui/telepathyClient.js
index 240969b..bba6e12 100644
--- a/js/ui/telepathyClient.js
+++ b/js/ui/telepathyClient.js
@@ -532,7 +532,7 @@ const ChatSource = new Lang.Class({
},
_updateAvatarIcon: function() {
- this._setSummaryIcon(this.createIcon(this.ICON_SIZE));
+ this.iconUpdated();
this._notification.update(this._notification.title, null, { customContent: true });
},
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]