MessageTray: keep notification focused through update()

If a notification was updated while one of its widgets was focused,
it would lose the grab when that widget was destroyed. Fix that by
moving the focus to a safe place before destroying the old widgets.

https://bugzilla.gnome.org/show_bug.cgi?id=643687
This commit is contained in:
Dan Winship 2011-03-02 09:48:29 -05:00 committed by Marina Zhurakhinskaya
parent 5a86b0f9e3
commit 8fdbbe78f4

View File

@ -467,17 +467,25 @@ Notification.prototype = {
this._customContent = params.customContent; this._customContent = params.customContent;
let oldFocus = global.stage.key_focus;
if (this._icon) if (this._icon)
this._icon.destroy(); this._icon.destroy();
// We always clear the content area if we don't have custom // We always clear the content area if we don't have custom
// content because it might contain the @banner that didn't // content because it might contain the @banner that didn't
// fit in the banner mode. // fit in the banner mode.
if (this._scrollArea && (!this._customContent || params.clear)) { if (this._scrollArea && (!this._customContent || params.clear)) {
if (oldFocus && this._scrollArea.contains(oldFocus))
this.actor.grab_key_focus();
this._scrollArea.destroy(); this._scrollArea.destroy();
this._scrollArea = null; this._scrollArea = null;
this._contentArea = null; this._contentArea = null;
} }
if (this._actionArea && params.clear) { if (this._actionArea && params.clear) {
if (oldFocus && this._actionArea.contains(oldFocus))
this.actor.grab_key_focus();
this._actionArea.destroy(); this._actionArea.destroy();
this._actionArea = null; this._actionArea = null;
this._buttonBox = null; this._buttonBox = null;