ScreenShield/MessageTray: fix crash after the introduction of close buttons

Commit 5c6b1fd0c modified the hierarchy of SummaryItem contents, by
introducing a notificationStackWidget in place of the StackView, but
forgot to update the bits in ScreenShield.NotificationsBox that accessed
and reparented that directly, causing a crash by invalid theme node access.

https://bugzilla.gnome.org/show_bug.cgi?id=682683
This commit is contained in:
Giovanni Campagna 2012-08-25 21:01:57 +02:00
parent e5534e86ab
commit 47d46e367e
2 changed files with 16 additions and 5 deletions

View File

@ -1258,6 +1258,14 @@ const SummaryItem = new Lang.Class({
global.focus_manager.add_group(this.rightClickMenu); global.focus_manager.add_group(this.rightClickMenu);
}, },
get closeButtonVisible() {
return this._closeButton.visible;
},
set closeButtonVisible(v) {
this._closeButton.visible = v;
},
prepareNotificationStackForShowing: function() { prepareNotificationStackForShowing: function() {
if (this.notificationStack.get_n_children() > 0) if (this.notificationStack.get_n_children() > 0)
return; return;
@ -1266,7 +1274,6 @@ const SummaryItem = new Lang.Class({
this._appendNotificationToStack(this.source.notifications[i]); this._appendNotificationToStack(this.source.notifications[i]);
} }
this.notificationStackWidget.width = this.notificationStackView.width;
this.scrollTo(St.Side.BOTTOM); this.scrollTo(St.Side.BOTTOM);
}, },
@ -2341,6 +2348,7 @@ const MessageTray = new Lang.Class({
this._notificationQueue = newQueue; this._notificationQueue = newQueue;
this._summaryBoxPointer.bin.child = this._summaryBoxPointerItem.notificationStackWidget; this._summaryBoxPointer.bin.child = this._summaryBoxPointerItem.notificationStackWidget;
this._summaryBoxPointerItem.closeButtonVisible = true;
this._summaryBoxPointerItem.prepareNotificationStackForShowing(); this._summaryBoxPointerItem.prepareNotificationStackForShowing();
} else if (this._clickedSummaryItemMouseButton == 3) { } else if (this._clickedSummaryItemMouseButton == 3) {
this._summaryBoxPointer.bin.child = this._clickedSummaryItem.rightClickMenu; this._summaryBoxPointer.bin.child = this._clickedSummaryItem.rightClickMenu;

View File

@ -183,8 +183,9 @@ const NotificationsBox = new Lang.Class({
}; };
if (obj.resident) { if (obj.resident) {
this._residentNotificationBox.add(item.notificationStackWidget);
item.closeButtonVisible = false;
item.prepareNotificationStackForShowing(); item.prepareNotificationStackForShowing();
this._residentNotificationBox.add(item.notificationStackView);
} else { } else {
[obj.sourceBox, obj.countLabel] = this._makeNotificationSource(item.source); [obj.sourceBox, obj.countLabel] = this._makeNotificationSource(item.source);
this._persistentNotificationBox.add(obj.sourceBox, { x_fill: false, x_align: St.Align.MIDDLE }); this._persistentNotificationBox.add(obj.sourceBox, { x_fill: false, x_align: St.Align.MIDDLE });
@ -229,7 +230,8 @@ const NotificationsBox = new Lang.Class({
if (obj.resident && !itemShouldBeResident) { if (obj.resident && !itemShouldBeResident) {
// make into a regular item // make into a regular item
this._residentNotificationBox.remove_actor(obj.item.notificationStackView); obj.item.doneShowingNotificationStack();
this._residentNotificationBox.remove_actor(obj.item.notificationStackWidget);
[obj.sourceBox, obj.countLabel] = this._makeNotificationSource(obj.source); [obj.sourceBox, obj.countLabel] = this._makeNotificationSource(obj.source);
this._persistentNotificationBox.add(obj.sourceBox); this._persistentNotificationBox.add(obj.sourceBox);
@ -239,8 +241,9 @@ const NotificationsBox = new Lang.Class({
obj.sourceBox = obj.countLabel = null; obj.sourceBox = obj.countLabel = null;
obj.resident = true; obj.resident = true;
this._residentNotificationBox.add(obj.item.notificationStackWidget);
obj.item.closeButtonVisible = false;
obj.item.prepareNotificationStackForShowing(); obj.item.prepareNotificationStackForShowing();
this._residentNotificationBox.add(obj.item.notificationStackView);
} else { } else {
// just update the counter // just update the counter
let count = obj.source.unseenCount; let count = obj.source.unseenCount;
@ -262,8 +265,8 @@ const NotificationsBox = new Lang.Class({
_removeItem: function(obj) { _removeItem: function(obj) {
if (obj.resident) { if (obj.resident) {
this._residentNotificationBox.remove_actor(obj.item.notificationStackView);
obj.item.doneShowingNotificationStack(); obj.item.doneShowingNotificationStack();
this._residentNotificationBox.remove_actor(obj.item.notificationStackWidget);
} else { } else {
obj.sourceBox.destroy(); obj.sourceBox.destroy();
} }