[gnome-shell/wip/fmuellner/notification-redux+sass: 123/141] messageTray: Skip banner mode when queue exceeds a threshold



commit ff71a05d85083a1de914ee2e9970270776ac39e7
Author: Florian Müllner <fmuellner gnome org>
Date:   Sat Feb 14 03:18:52 2015 +0100

    messageTray: Skip banner mode when queue exceeds a threshold
    
    We want to shield users from being overloaded by an overwhelming stream
    of notification banners, either due to coming back from idle/lock or
    because an application is misbehaving. Previously we replaced all queued
    notifications with a summary notification in that case, but now that
    notifications appear in the summary immediately, we can simply stop
    adding them to the queue and rely on the date menu to convey that
    information to the user.

 js/ui/messageTray.js |   21 +++++++++++++++------
 1 files changed, 15 insertions(+), 6 deletions(-)
---
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index d7940e3..2ffa9b3 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -27,6 +27,8 @@ const NOTIFICATION_TIMEOUT = 4;
 const HIDE_TIMEOUT = 0.2;
 const LONGER_HIDE_TIMEOUT = 0.6;
 
+const MAX_NOTIFICATIONS_IN_QUEUE = 3;
+
 // We delay hiding of the tray if the mouse is within MOUSE_LEFT_ACTOR_THRESHOLD
 // range from the point where it left the tray.
 const MOUSE_LEFT_ACTOR_THRESHOLD = 20;
@@ -1553,12 +1555,19 @@ const MessageTray = new Lang.Class({
             // we stop hiding it and show it again.
             this._updateShowingNotification();
         } else if (this._notificationQueue.indexOf(notification) < 0) {
-            notification.connect('destroy',
-                                 Lang.bind(this, this._onNotificationDestroy));
-            this._notificationQueue.push(notification);
-            this._notificationQueue.sort(function(notification1, notification2) {
-                return (notification2.urgency - notification1.urgency);
-            });
+            // If the queue is "full", we skip banner mode and just show a small
+            // indicator in the panel; however do make an exception for CRITICAL
+            // notifications, as only banner mode allows expansion.
+            let bannerCount = this._notification ? 1 : 0;
+            let full = (this.queueCount + bannerCount >= MAX_NOTIFICATIONS_IN_QUEUE);
+            if (!full || notification.urgency == Urgency.CRITICAL) {
+                notification.connect('destroy',
+                                     Lang.bind(this, this._onNotificationDestroy));
+                this._notificationQueue.push(notification);
+                this._notificationQueue.sort(function(notification1, notification2) {
+                    return (notification2.urgency - notification1.urgency);
+                });
+            }
         }
         this._updateState();
     },


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