[gnome-shell/wip/fmuellner/notification-redux+sass: 123/141] messageTray: Skip banner mode when queue exceeds a threshold
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/wip/fmuellner/notification-redux+sass: 123/141] messageTray: Skip banner mode when queue exceeds a threshold
- Date: Thu, 19 Feb 2015 21:05:11 +0000 (UTC)
commit 0484b25e3704762e16fcff7bbcac2f4249c4db8e
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]