Merge branch 'master' into datetime

This commit is contained in:
David Zeuthen 2011-01-28 13:26:05 -05:00
commit cd468021e2
2 changed files with 32 additions and 11 deletions

View File

@ -41,6 +41,17 @@ const State = {
HIDING: 3 HIDING: 3
}; };
// These reasons are useful when we destroy the notifications received through
// the notification daemon. We use EXPIRED for transient notifications that the
// user did not interact with, DISMISSED for all other notifications that were
// destroyed as a result of a user action, and SOURCE_CLOSED for the notifications
// that were requested to be destroyed by the associated source.
const NotificationDestroyedReason = {
EXPIRED: 1,
DISMISSED: 2,
SOURCE_CLOSED 3
};
// Message tray has its custom Urgency enumeration. LOW, NORMAL and CRITICAL // Message tray has its custom Urgency enumeration. LOW, NORMAL and CRITICAL
// urgency values map to the corresponding values for the notifications received // urgency values map to the corresponding values for the notifications received
// through the notification daemon. HIGH urgency value is used for chats received // through the notification daemon. HIGH urgency value is used for chats received
@ -755,8 +766,10 @@ Notification.prototype = {
} }
}, },
destroy: function() { destroy: function(reason) {
this.emit('destroy'); if (!reason)
reason = NotificationDestroyedReason.DISMISSED;
this.emit('destroy', reason);
} }
}; };
Signals.addSignalMethods(Notification.prototype); Signals.addSignalMethods(Notification.prototype);
@ -1596,7 +1609,7 @@ MessageTray.prototype = {
let notification = this._notification; let notification = this._notification;
this._notification = null; this._notification = null;
if (notification.isTransient) if (notification.isTransient)
notification.destroy(); notification.destroy(NotificationDestroyedReason.EXPIRED);
}, },
_expandNotification: function(autoExpanding) { _expandNotification: function(autoExpanding) {
@ -1746,7 +1759,7 @@ MessageTray.prototype = {
let summaryNotification = this._summaryNotification; let summaryNotification = this._summaryNotification;
this._summaryNotification = null; this._summaryNotification = null;
if (summaryNotification.isTransient && !this._reNotifyWithSummaryNotificationAfterHide) if (summaryNotification.isTransient && !this._reNotifyWithSummaryNotificationAfterHide)
summaryNotification.destroy(); summaryNotification.destroy(NotificationDestroyedReason.EXPIRED);
if (this._reNotifyWithSummaryNotificationAfterHide) { if (this._reNotifyWithSummaryNotificationAfterHide) {
this._onNotify(summaryNotification.source, summaryNotification); this._onNotify(summaryNotification.source, summaryNotification);
this._reNotifyWithSummaryNotificationAfterHide = false; this._reNotifyWithSummaryNotificationAfterHide = false;

View File

@ -322,13 +322,22 @@ NotificationDaemon.prototype = {
{ icon: iconActor, { icon: iconActor,
bannerMarkup: true }); bannerMarkup: true });
ndata.notification = notification; ndata.notification = notification;
notification.connect('clicked', Lang.bind(this,
function(n) {
this._emitNotificationClosed(id, NotificationClosedReason.DISMISSED);
}));
notification.connect('destroy', Lang.bind(this, notification.connect('destroy', Lang.bind(this,
function(n) { function(n, reason) {
delete this._notifications[id]; delete this._notifications[id];
let notificationClosedReason;
switch (reason) {
case MessageTray.NotificationDestroyedReason.EXPIRED:
notificationClosedReason = NotificationClosedReason.EXPIRED;
break;
case MessageTray.NotificationDestroyedReason.DISMISSED:
notificationClosedReason = NotificationClosedReason.DISMISSED;
break;
case MessageTray.NotificationDestroyedReason.SOURCE_CLOSED:
notificationClosedReason = NotificationClosedReason.APP_CLOSED;
break;
}
this._emitNotificationClosed(id, notificationClosedReason);
})); }));
notification.connect('action-invoked', Lang.bind(this, notification.connect('action-invoked', Lang.bind(this,
function(n, actionId) { function(n, actionId) {
@ -369,10 +378,9 @@ NotificationDaemon.prototype = {
let ndata = this._notifications[id]; let ndata = this._notifications[id];
if (ndata) { if (ndata) {
if (ndata.notification) if (ndata.notification)
ndata.notification.destroy(); ndata.notification.destroy(MessageTray.NotificationDestroyedReason.SOURCE_CLOSED);
delete this._notifications[id]; delete this._notifications[id];
} }
this._emitNotificationClosed(id, NotificationClosedReason.APP_CLOSED);
}, },
GetCapabilities: function() { GetCapabilities: function() {