From de050991d45b588da0ac1fdedc1e63512f2cbfa8 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" <jstpierre@mecheye.net> Date: Fri, 2 Aug 2013 00:18:55 -0400 Subject: [PATCH] messageTray: Remove the stackedNotification tracking complexity We only have one signal left to track, but since it's destroy it doesn't matter if it's disconnected or not since it will eventually be GC'd. --- js/ui/messageTray.js | 56 ++++++++++++-------------------------------- 1 file changed, 15 insertions(+), 41 deletions(-) diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index 5aee7c33c..5ae077161 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -1448,25 +1448,17 @@ const SummaryItem = new Lang.Class({ if (this.notificationStack.get_n_children() > 0) return; - for (let i = 0; i < this.source.notifications.length; i++) { - this._appendNotificationToStack(this.source.notifications[i]); - } - + this.source.notifications.forEach(Lang.bind(this, this._appendNotificationToStack)); this.scrollTo(St.Side.BOTTOM); }, doneShowingNotificationStack: function() { - for (let i = 0; i < this._stackedNotifications.length; i++) { - let stackedNotification = this._stackedNotifications[i]; - let notification = stackedNotification.notification; + this.source.notifications.forEach(Lang.bind(this, function(notification) { notification.collapseCompleted(); - notification.disconnect(stackedNotification.notificationDestroyedId); - if (notification.actor.get_parent() == this.notificationStack) - this.notificationStack.remove_actor(notification.actor); notification.setIconVisible(true); notification.enableScrolling(true); - } - this._stackedNotifications = []; + this.notificationStack.remove_actor(notification.actor); + })); }, _notificationAddedToSource: function(source, notification) { @@ -1474,17 +1466,21 @@ const SummaryItem = new Lang.Class({ this._appendNotificationToStack(notification); }, + _contentUpdated: function() { + this.source.notifications.forEach(function(notification, i) { + notification.setIconVisible(i == 0); + }); + + this.emit('content-updated'); + }, + _appendNotificationToStack: function(notification) { - let stackedNotification = {}; - stackedNotification.notification = notification; - stackedNotification.notificationDestroyedId = notification.connect('destroy', Lang.bind(this, this._notificationDestroyed)); - this._stackedNotifications.push(stackedNotification); + notification.connect('destroy', Lang.bind(this, this._contentUpdated)); if (!this.source.isChat) notification.enableScrolling(false); - if (this.notificationStack.get_n_children() > 0) - notification.setIconVisible(false); - this.notificationStack.add(notification.actor); notification.expand(false); + this.notificationStack.add(notification.actor); + this._contentUpdated(); }, // scrollTo: @@ -1498,28 +1494,6 @@ const SummaryItem = new Lang.Class({ else if (side == St.Side.BOTTOM) adjustment.value = adjustment.upper; }, - - _contentUpdated: function() { - this.emit('content-updated'); - }, - - _notificationDestroyed: function(notification) { - for (let i = 0; i < this._stackedNotifications.length; i++) { - if (this._stackedNotifications[i].notification == notification) { - let stackedNotification = this._stackedNotifications[i]; - notification.disconnect(stackedNotification.notificationDestroyedId); - this._stackedNotifications.splice(i, 1); - if (notification.actor.get_parent() == this.notificationStack) - this.notificationStack.remove_actor(notification.actor); - this._contentUpdated(); - break; - } - } - - let firstNotification = this._stackedNotifications[0]; - if (firstNotification) - firstNotification.notification.setIconVisible(true); - } }); Signals.addSignalMethods(SummaryItem.prototype);