dialog: Fix setting buttons as initial key focus
Commit 1c7a3ee61b
broke setting the initial key focus for default
buttons added via addButton(). Fix this by allowing the dialog class
to provide a different default widget to ModalDialog than the entire
dialog itself.
https://bugzilla.gnome.org/show_bug.cgi?id=788282
This commit is contained in:
parent
1939e22c22
commit
0b02f757f8
@ -15,6 +15,7 @@ var Dialog = new Lang.Class({
|
|||||||
this.parent({ layout_manager: new Clutter.BinLayout() });
|
this.parent({ layout_manager: new Clutter.BinLayout() });
|
||||||
this.connect('destroy', Lang.bind(this, this._onDestroy));
|
this.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||||
|
|
||||||
|
this._initialKeyFocus = null;
|
||||||
this._pressedKey = null;
|
this._pressedKey = null;
|
||||||
this._buttonKeys = {};
|
this._buttonKeys = {};
|
||||||
this._createDialog();
|
this._createDialog();
|
||||||
@ -86,6 +87,10 @@ var Dialog = new Lang.Class({
|
|||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
get initialKeyFocus() {
|
||||||
|
return this._initialKeyFocus || this;
|
||||||
|
},
|
||||||
|
|
||||||
addContent: function (actor) {
|
addContent: function (actor) {
|
||||||
this.contentLayout.add (actor, { expand: true });
|
this.contentLayout.add (actor, { expand: true });
|
||||||
},
|
},
|
||||||
@ -116,7 +121,7 @@ var Dialog = new Lang.Class({
|
|||||||
if (isDefault)
|
if (isDefault)
|
||||||
button.add_style_pseudo_class('default');
|
button.add_style_pseudo_class('default');
|
||||||
|
|
||||||
if (!this._initialKeyFocusDestroyId)
|
if (this._initialKeyFocus == null || isDefault)
|
||||||
this._initialKeyFocus = button;
|
this._initialKeyFocus = button;
|
||||||
|
|
||||||
for (let i in keys)
|
for (let i in keys)
|
||||||
|
@ -84,7 +84,7 @@ var ModalDialog = new Lang.Class({
|
|||||||
}
|
}
|
||||||
|
|
||||||
global.focus_manager.add_group(this.dialogLayout);
|
global.focus_manager.add_group(this.dialogLayout);
|
||||||
this._initialKeyFocus = this.dialogLayout;
|
this._initialKeyFocus = null;
|
||||||
this._initialKeyFocusDestroyId = 0;
|
this._initialKeyFocusDestroyId = 0;
|
||||||
this._savedKeyFocus = null;
|
this._savedKeyFocus = null;
|
||||||
},
|
},
|
||||||
@ -157,7 +157,7 @@ var ModalDialog = new Lang.Class({
|
|||||||
this._initialKeyFocus = actor;
|
this._initialKeyFocus = actor;
|
||||||
|
|
||||||
this._initialKeyFocusDestroyId = actor.connect('destroy', Lang.bind(this, function() {
|
this._initialKeyFocusDestroyId = actor.connect('destroy', Lang.bind(this, function() {
|
||||||
this._initialKeyFocus = this.dialogLayout;
|
this._initialKeyFocus = null;
|
||||||
this._initialKeyFocusDestroyId = 0;
|
this._initialKeyFocusDestroyId = 0;
|
||||||
}));
|
}));
|
||||||
},
|
},
|
||||||
@ -237,7 +237,8 @@ var ModalDialog = new Lang.Class({
|
|||||||
this._savedKeyFocus.grab_key_focus();
|
this._savedKeyFocus.grab_key_focus();
|
||||||
this._savedKeyFocus = null;
|
this._savedKeyFocus = null;
|
||||||
} else {
|
} else {
|
||||||
this._initialKeyFocus.grab_key_focus();
|
let focus = this._initialKeyFocus || this.dialogLayout.initialKeyFocus;
|
||||||
|
focus.grab_key_focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this._shellReactive)
|
if (!this._shellReactive)
|
||||||
|
Loading…
Reference in New Issue
Block a user