From fd103ff7030402503ab60b68b5b35c145c491d63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 5 Oct 2017 10:06:10 +0200 Subject: [PATCH] dialog: Reset initial focus on destroy Since 0b02f757f862 we track the button that should have key focus when the dialog is opened. However when the dialog is reused, the button may get destroyed - clear the initial focus in that case to allow setButton() to set a new one. https://bugzilla.gnome.org/show_bug.cgi?id=788542 --- js/ui/dialog.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/js/ui/dialog.js b/js/ui/dialog.js index 781fe0a97..090ef2fee 100644 --- a/js/ui/dialog.js +++ b/js/ui/dialog.js @@ -16,6 +16,7 @@ var Dialog = new Lang.Class({ this.connect('destroy', Lang.bind(this, this._onDestroy)); this._initialKeyFocus = null; + this._initialKeyFocusDestroyId = 0; this._pressedKey = null; this._buttonKeys = {}; this._createDialog(); @@ -87,6 +88,18 @@ var Dialog = new Lang.Class({ return Clutter.EVENT_PROPAGATE; }, + _setInitialKeyFocus: function(actor) { + if (this._initialKeyFocus) + this._initialKeyFocus.disconnect(this._initialKeyFocusDestroyId); + + this._initialKeyFocus = actor; + + this._initialKeyFocusDestroyId = actor.connect('destroy', () => { + this._initialKeyFocus = null; + this._initialKeyFocusDestroyId = 0; + }); + }, + get initialKeyFocus() { return this._initialKeyFocus || this; }, @@ -122,7 +135,7 @@ var Dialog = new Lang.Class({ button.add_style_pseudo_class('default'); if (this._initialKeyFocus == null || isDefault) - this._initialKeyFocus = button; + this._setInitialKeyFocus(button); for (let i in keys) this._buttonKeys[keys[i]] = buttonInfo;