[gnome-shell] messageTray: Remove the stackedNotification tracking complexity



commit de050991d45b588da0ac1fdedc1e63512f2cbfa8
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Fri Aug 2 00:18:55 2013 -0400

    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 files changed, 15 insertions(+), 41 deletions(-)
---
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index 5aee7c3..5ae0771 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);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]