Disconnect content-updated signal early

During the box pointer animation, other events can trigger an updateState,
losing the information that the summary is hiding and thus never disconnecting
the signals. Then, this stale connections can cause stacktraces, as they
fire when summaryBoxPointerItem is null.

https://bugzilla.gnome.org/show_bug.cgi?id=692693
This commit is contained in:
Giovanni Campagna 2013-01-28 12:01:36 +01:00
parent 85743ede7e
commit cc60afa31a

View File

@ -2613,6 +2613,20 @@ const MessageTray = new Lang.Class({
_onSummaryBoxPointerUngrabbed: function() { _onSummaryBoxPointerUngrabbed: function() {
this._summaryBoxPointerState = State.HIDING; this._summaryBoxPointerState = State.HIDING;
if (this._summaryBoxPointerContentUpdatedId) {
this._summaryBoxPointerItem.disconnect(this._summaryBoxPointerContentUpdatedId);
this._summaryBoxPointerContentUpdatedId = 0;
}
if (this._summaryBoxPointerCloseClickedId != 0) {
this._summaryBoxPointerItem.closeButton.disconnect(this._summaryBoxPointerCloseClickedId);
this._summaryBoxPointerCloseClickedId = 0;
}
if (this._sourceDoneDisplayingId) {
this._summaryBoxPointerItem.source.disconnect(this._sourceDoneDisplayingId);
this._sourceDoneDisplayingId = 0;
}
this._unlock(); this._unlock();
if (this._summaryBoxPointerItem.source.notifications.length == 0) { if (this._summaryBoxPointerItem.source.notifications.length == 0) {
@ -2635,14 +2649,6 @@ const MessageTray = new Lang.Class({
this._summaryBoxPointerState = State.HIDDEN; this._summaryBoxPointerState = State.HIDDEN;
this._summaryBoxPointer.bin.child = null; this._summaryBoxPointer.bin.child = null;
this._summaryBoxPointerItem.disconnect(this._summaryBoxPointerContentUpdatedId);
this._summaryBoxPointerContentUpdatedId = 0;
if (this._summaryBoxPointerCloseClickedId != 0) {
this._summaryBoxPointerItem.closeButton.disconnect(this._summaryBoxPointerCloseClickedId);
this._summaryBoxPointerCloseClickedId = 0;
}
this._summaryBoxPointerItem.source.disconnect(this._sourceDoneDisplayingId);
this._summaryBoxPointerDoneDisplayingId = 0;
let sourceNotificationStackDoneShowing = null; let sourceNotificationStackDoneShowing = null;
if (doneShowingNotificationStack) { if (doneShowingNotificationStack) {