keyboard: Ignore focus changes from extended keys

The keyboard is shown/hidden automatically when (un)focusing a
ClutterText actor. This behavior is unwanted when opening the
extended keys popup, so focus changes to the popup are ignored.
However, we also want to ignore focus changes from the popup
to avoid the keyboard hiding itself after pressing an extended
key.

https://bugzilla.gnome.org/show_bug.cgi?id=683546
This commit is contained in:
Florian Müllner 2012-09-24 20:03:53 +02:00
parent f8ce788425
commit ef9f63fe59

View File

@ -201,6 +201,7 @@ const Keyboard = new Lang.Class({
this.actor = null; this.actor = null;
this._focusInTray = false; this._focusInTray = false;
this._focusInExtendedKeys = false;
this._timestamp = global.display.get_current_time_roundtrip(); this._timestamp = global.display.get_current_time_roundtrip();
Main.layoutManager.connect('monitors-changed', Lang.bind(this, this._redraw)); Main.layoutManager.connect('monitors-changed', Lang.bind(this, this._redraw));
@ -289,7 +290,9 @@ const Keyboard = new Lang.Class({
// Showing an extended key popup and clicking a key from the extended keys // Showing an extended key popup and clicking a key from the extended keys
// will grab focus, but ignore that // will grab focus, but ignore that
if (focus && (focus._extended_keys || focus.extended_key)) let extendedKeysWereFocused = this._focusInExtendedKeys;
this._focusInExtendedKeys = focus && (focus._extended_keys || focus.extended_key);
if (this._focusInExtendedKeys || extendedKeysWereFocused)
return; return;
// Ignore focus changes caused by message tray showing/hiding // Ignore focus changes caused by message tray showing/hiding