notificationDaemon: Keep source alive when replacing notification

When a GNotification has the same ID as a previous one, it should
be shown as a new notification after withdrawing the old one.
However for this to work, we must not destroy the corresponding
source if withdrawing the old notification lets the notification
count drop to zero, so make sure the source is kept alive until
the replace operation has completed.

https://bugzilla.gnome.org/show_bug.cgi?id=775149
This commit is contained in:
Florian Müllner 2016-11-26 19:32:22 +01:00
parent 75d797a0ac
commit accd24e379

View File

@ -690,6 +690,7 @@ const GtkNotificationDaemonAppSource = new Lang.Class({
throw new InvalidAppError(); throw new InvalidAppError();
this._notifications = {}; this._notifications = {};
this._notificationPending = false;
this.parent(this._app.get_name()); this.parent(this._app.get_name());
}, },
@ -729,6 +730,8 @@ const GtkNotificationDaemonAppSource = new Lang.Class({
}, },
addNotification: function(notificationId, notificationParams, showBanner) { addNotification: function(notificationId, notificationParams, showBanner) {
this._notificationPending = true;
if (this._notifications[notificationId]) if (this._notifications[notificationId])
this._notifications[notificationId].destroy(); this._notifications[notificationId].destroy();
@ -742,6 +745,14 @@ const GtkNotificationDaemonAppSource = new Lang.Class({
this.notify(notification); this.notify(notification);
else else
this.pushNotification(notification); this.pushNotification(notification);
this._notificationPending = false;
},
destroy: function(reason) {
if (this._notificationPending)
return;
this.parent(reason);
}, },
removeNotification: function(notificationId) { removeNotification: function(notificationId) {