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;
let oldFocus = global.stage.key_focus;
if (this._icon)
this._icon.destroy();
// We always clear the content area if we don't have custom
// content because it might contain the @banner that didn't
// fit in the banner mode.
if (this._scrollArea && (!this._customContent || params.clear)) {
if (oldFocus && this._scrollArea.contains(oldFocus))
this.actor.grab_key_focus();
this._scrollArea.destroy();
this._scrollArea = null;
this._contentArea = null;
}
if (this._actionArea && params.clear) {
if (oldFocus && this._actionArea.contains(oldFocus))
this.actor.grab_key_focus();
this._actionArea.destroy();
this._actionArea = null;
this._buttonBox = null;