system: Keep key focus when switching between alternatives

When switching between alternatives in AltSwitcher, the currently
visible child is replaced with the alternative. If the original
child has the key focus when it is removed from the stage, the
focus is lost. Detect this case and manually move the focus to
the new child.

https://bugzilla.gnome.org/show_bug.cgi?id=727259
This commit is contained in:
Florian Müllner 2014-04-26 21:48:46 +02:00
parent a0c146bbfd
commit e9ae77186d

View File

@ -56,7 +56,10 @@ const AltSwitcher = new Lang.Class({
}
if (this.actor.get_child() != childToShow) {
let hasFocus = this.actor.contains(global.stage.get_key_focus());
this.actor.set_child(childToShow);
if (hasFocus)
childToShow.grab_key_focus();
// The actors might respond to hover, so
// sync the pointer to make sure they update.