diff --git a/js/ui/dialog.js b/js/ui/dialog.js index 3fdc3ef88..781fe0a97 100644 --- a/js/ui/dialog.js +++ b/js/ui/dialog.js @@ -15,6 +15,7 @@ var Dialog = new Lang.Class({ this.parent({ layout_manager: new Clutter.BinLayout() }); this.connect('destroy', Lang.bind(this, this._onDestroy)); + this._initialKeyFocus = null; this._pressedKey = null; this._buttonKeys = {}; this._createDialog(); @@ -86,6 +87,10 @@ var Dialog = new Lang.Class({ return Clutter.EVENT_PROPAGATE; }, + get initialKeyFocus() { + return this._initialKeyFocus || this; + }, + addContent: function (actor) { this.contentLayout.add (actor, { expand: true }); }, @@ -116,7 +121,7 @@ var Dialog = new Lang.Class({ if (isDefault) button.add_style_pseudo_class('default'); - if (!this._initialKeyFocusDestroyId) + if (this._initialKeyFocus == null || isDefault) this._initialKeyFocus = button; for (let i in keys) diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js index 1547b89d3..0e66e032a 100644 --- a/js/ui/modalDialog.js +++ b/js/ui/modalDialog.js @@ -84,7 +84,7 @@ var ModalDialog = new Lang.Class({ } global.focus_manager.add_group(this.dialogLayout); - this._initialKeyFocus = this.dialogLayout; + this._initialKeyFocus = null; this._initialKeyFocusDestroyId = 0; this._savedKeyFocus = null; }, @@ -157,7 +157,7 @@ var ModalDialog = new Lang.Class({ this._initialKeyFocus = actor; this._initialKeyFocusDestroyId = actor.connect('destroy', Lang.bind(this, function() { - this._initialKeyFocus = this.dialogLayout; + this._initialKeyFocus = null; this._initialKeyFocusDestroyId = 0; })); }, @@ -237,7 +237,8 @@ var ModalDialog = new Lang.Class({ this._savedKeyFocus.grab_key_focus(); this._savedKeyFocus = null; } else { - this._initialKeyFocus.grab_key_focus(); + let focus = this._initialKeyFocus || this.dialogLayout.initialKeyFocus; + focus.grab_key_focus(); } if (!this._shellReactive)