From 8fdbbe78f4b84bb8bc72df91465641ba6c7c9921 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Wed, 2 Mar 2011 09:48:29 -0500 Subject: [PATCH] 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 --- js/ui/messageTray.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index a2810390c..f95180167 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -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;