messageTray: Limit number of notifications per source
While applications can no longer spam the users with a constant stream of banner notifications, it is still possible to drown the summary in the message list. Avoid this by limiting the number of notifications a single source is allowed to display simultaniously. test-xy-stress in libnotify's tests suddenly became fun again ... https://bugzilla.gnome.org/show_bug.cgi?id=744850
This commit is contained in:
parent
8c72c93aae
commit
4eff643d59
@ -28,6 +28,7 @@ const HIDE_TIMEOUT = 0.2;
|
|||||||
const LONGER_HIDE_TIMEOUT = 0.6;
|
const LONGER_HIDE_TIMEOUT = 0.6;
|
||||||
|
|
||||||
const MAX_NOTIFICATIONS_IN_QUEUE = 3;
|
const MAX_NOTIFICATIONS_IN_QUEUE = 3;
|
||||||
|
const MAX_NOTIFICATIONS_PER_SOURCE = 3;
|
||||||
|
|
||||||
// We delay hiding of the tray if the mouse is within MOUSE_LEFT_ACTOR_THRESHOLD
|
// We delay hiding of the tray if the mouse is within MOUSE_LEFT_ACTOR_THRESHOLD
|
||||||
// range from the point where it left the tray.
|
// range from the point where it left the tray.
|
||||||
@ -43,10 +44,10 @@ const State = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// These reasons are useful when we destroy the notifications received through
|
// These reasons are useful when we destroy the notifications received through
|
||||||
// the notification daemon. We use EXPIRED for transient notifications that the
|
// the notification daemon. We use EXPIRED for notifications that we dismiss
|
||||||
// user did not interact with, DISMISSED for all other notifications that were
|
// and the user did not interact with, DISMISSED for all other notifications
|
||||||
// destroyed as a result of a user action, and SOURCE_CLOSED for the notifications
|
// that were destroyed as a result of a user action, and SOURCE_CLOSED for the
|
||||||
// that were requested to be destroyed by the associated source.
|
// notifications that were requested to be destroyed by the associated source.
|
||||||
const NotificationDestroyedReason = {
|
const NotificationDestroyedReason = {
|
||||||
EXPIRED: 1,
|
EXPIRED: 1,
|
||||||
DISMISSED: 2,
|
DISMISSED: 2,
|
||||||
@ -1304,6 +1305,9 @@ const Source = new Lang.Class({
|
|||||||
if (this.notifications.indexOf(notification) >= 0)
|
if (this.notifications.indexOf(notification) >= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
while (this.notifications.length >= MAX_NOTIFICATIONS_PER_SOURCE)
|
||||||
|
this.notifications.shift().destroy(NotificationDestroyedReason.EXPIRED);
|
||||||
|
|
||||||
notification.connect('destroy', Lang.bind(this, this._onNotificationDestroy));
|
notification.connect('destroy', Lang.bind(this, this._onNotificationDestroy));
|
||||||
notification.connect('acknowledged-changed', Lang.bind(this, this.countUpdated));
|
notification.connect('acknowledged-changed', Lang.bind(this, this.countUpdated));
|
||||||
this.notifications.push(notification);
|
this.notifications.push(notification);
|
||||||
|
Loading…
Reference in New Issue
Block a user