notificationDaemon: Work around JS interpreter bug
The "id" variable was being sporadically reset to null, and as far as Florian and I could determine, this is actually a Spidermonkey bug. The issue has something to do with: 1) use of "let" for the variable 2) Nesting a dynamic closure inside of a for() loop Work around it here for now - I tried to create a minimized test case to hand to the Spidermonkey developers, but failed. A big part of the problem is it's only sporadically reproducible.
This commit is contained in:
parent
ca2678446d
commit
b76efe17d6
@ -305,7 +305,7 @@ NotificationDaemon.prototype = {
|
|||||||
ndata.notification = notification;
|
ndata.notification = notification;
|
||||||
notification.connect('destroy', Lang.bind(this,
|
notification.connect('destroy', Lang.bind(this,
|
||||||
function(n, reason) {
|
function(n, reason) {
|
||||||
delete this._notifications[id];
|
delete this._notifications[ndata.id];
|
||||||
let notificationClosedReason;
|
let notificationClosedReason;
|
||||||
switch (reason) {
|
switch (reason) {
|
||||||
case MessageTray.NotificationDestroyedReason.EXPIRED:
|
case MessageTray.NotificationDestroyedReason.EXPIRED:
|
||||||
@ -318,11 +318,11 @@ NotificationDaemon.prototype = {
|
|||||||
notificationClosedReason = NotificationClosedReason.APP_CLOSED;
|
notificationClosedReason = NotificationClosedReason.APP_CLOSED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
this._emitNotificationClosed(id, notificationClosedReason);
|
this._emitNotificationClosed(ndata.id, notificationClosedReason);
|
||||||
}));
|
}));
|
||||||
notification.connect('action-invoked', Lang.bind(this,
|
notification.connect('action-invoked', Lang.bind(this,
|
||||||
function(n, actionId) {
|
function(n, actionId) {
|
||||||
this._emitActionInvoked(id, actionId);
|
this._emitActionInvoked(ndata.id, actionId);
|
||||||
}));
|
}));
|
||||||
} else {
|
} else {
|
||||||
notification.update(summary, body, { icon: iconActor,
|
notification.update(summary, body, { icon: iconActor,
|
||||||
@ -336,7 +336,7 @@ NotificationDaemon.prototype = {
|
|||||||
if (actions[i] == 'default')
|
if (actions[i] == 'default')
|
||||||
notification.connect('clicked', Lang.bind(this,
|
notification.connect('clicked', Lang.bind(this,
|
||||||
function() {
|
function() {
|
||||||
this._emitActionInvoked(id, "default");
|
this._emitActionInvoked(ndata.id, "default");
|
||||||
}));
|
}));
|
||||||
else
|
else
|
||||||
notification.addButton(actions[i], actions[i + 1]);
|
notification.addButton(actions[i], actions[i + 1]);
|
||||||
|
Loading…
Reference in New Issue
Block a user