[gnome-shell/wip/new-notifications: 8/17] messageTray: Add an indicatorCount property to the tray
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/wip/new-notifications: 8/17] messageTray: Add an indicatorCount property to the tray
- Date: Thu, 5 Dec 2013 15:29:28 +0000 (UTC)
commit ccafa4a97c79ccc8f422188a3c4dd2eac46fc422
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Wed Dec 4 22:04:13 2013 -0500
messageTray: Add an indicatorCount property to the tray
So we don't have to do the property tracking here...
js/ui/messageTray.js | 24 +++++++++++++++++++++++-
js/ui/overviewControls.js | 34 +++++-----------------------------
2 files changed, 28 insertions(+), 30 deletions(-)
---
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index 1d87066..dc630b3 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -2032,7 +2032,8 @@ const MessageTray = new Lang.Class({
summaryItem: new SummaryItem(source),
notifyId: 0,
destroyId: 0,
- mutedChangedId: 0
+ mutedChangedId: 0,
+ countChangedId: 0,
};
let summaryItem = obj.summaryItem;
@@ -2057,6 +2058,9 @@ const MessageTray = new Lang.Class({
return source != notification.source;
});
}));
+ obj.countChangedId = source.connect('count-updated', Lang.bind(this, function() {
+ this.emit('indicator-count-updated');
+ }));
summaryItem.actor.connect('clicked', Lang.bind(this,
function(actor, button) {
@@ -2076,6 +2080,7 @@ const MessageTray = new Lang.Class({
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, function() { this._updateState();
return false; }));
this.emit('source-added', source);
+ this.emit('indicator-count-updated');
this._updateNoMessagesLabel();
},
@@ -2093,10 +2098,12 @@ const MessageTray = new Lang.Class({
source.disconnect(obj.notifyId);
source.disconnect(obj.destroyId);
source.disconnect(obj.mutedChangedId);
+ source.disconnect(obj.countChangedId);
summaryItem.destroy();
this.emit('source-removed', source);
+ this.emit('indicator-count-updated');
this._updateNoMessagesLabel();
},
@@ -2121,6 +2128,21 @@ const MessageTray = new Lang.Class({
this._removeSource(source);
},
+ get hasChatSources() {
+ return this._sources.keys().some(function(source) {
+ return source.isChat;
+ });
+ },
+
+ get indicatorCount() {
+ if (!this._sources.size())
+ return 0;
+
+ return this._sources.keys().map(function(source) {
+ return source.indicatorCount;
+ }).reduce(function(a, b) { return a + b });
+ },
+
_onNotificationDestroy: function(notification) {
if (this._notification == notification && (this._notificationState == State.SHOWN ||
this._notificationState == State.SHOWING)) {
this._updateNotificationTimeout(0);
diff --git a/js/ui/overviewControls.js b/js/ui/overviewControls.js
index ade0f19..de6142d 100644
--- a/js/ui/overviewControls.js
+++ b/js/ui/overviewControls.js
@@ -446,45 +446,21 @@ const MessagesIndicator = new Lang.Class({
this.actor.add_actor(this._container);
this.actor.add_actor(this._highlight);
- Main.messageTray.connect('source-added', Lang.bind(this, this._onSourceAdded));
- Main.messageTray.connect('source-removed', Lang.bind(this, this._onSourceRemoved));
-
- let sources = Main.messageTray.getSources();
- sources.forEach(Lang.bind(this, function(source) { this._onSourceAdded(null, source); }));
+ Main.messageTray.connect('indicator-count-updated', Lang.bind(this, this._sync));
+ this._sync();
this._viewSelector.connect('page-changed', Lang.bind(this, this._updateVisibility));
Main.overview.connect('showing', Lang.bind(this, this._updateVisibility));
},
- _onSourceAdded: function(tray, source) {
- if (source.trayIcon)
- return;
-
- source.connect('count-updated', Lang.bind(this, this._updateCount));
- this._sources.push(source);
- this._updateCount();
- },
-
- _onSourceRemoved: function(tray, source) {
- this._sources.splice(this._sources.indexOf(source), 1);
- this._updateCount();
- },
-
- _updateCount: function() {
- let count = 0;
- let hasChats = false;
- this._sources.forEach(Lang.bind(this,
- function(source) {
- count += source.indicatorCount;
- hasChats |= source.isChat;
- }));
-
+ _sync: function() {
+ let count = Main.messageTray.indicatorCount;
this._count = count;
this._label.text = ngettext("%d new message",
"%d new messages",
count).format(count);
- this._icon.visible = hasChats;
+ this._icon.visible = Main.messageTray.hasChatSources;
this._updateVisibility();
},
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]