keyboard: Do not call KeyboardManager.holdKeyboard() with set-content-type
When gnome-shell receives the signal of 'set-content-type' from ibus, gnome-shell calls KeyboardManager.holdKeyboard() and KeyboardManager.releaseKeyboard() and the functions change the current input focus in GNOME Xorg and it could result in closing a popup window which has a password entry by focusing on the entry. The solution is to stop to call the APIs on 'set-content-type' signal. https://gitlab.gnome.org/GNOME/gnome-shell/issues/391
This commit is contained in:
parent
4dc2039859
commit
551e827841
@ -360,11 +360,14 @@ var InputSourceManager = new Lang.Class({
|
|||||||
this._settings.connect('per-window-changed', this._sourcesPerWindowChanged.bind(this));
|
this._settings.connect('per-window-changed', this._sourcesPerWindowChanged.bind(this));
|
||||||
this._sourcesPerWindowChanged();
|
this._sourcesPerWindowChanged();
|
||||||
this._disableIBus = false;
|
this._disableIBus = false;
|
||||||
|
this._reloading = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
reload() {
|
reload() {
|
||||||
|
this._reloading = true;
|
||||||
this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions);
|
this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions);
|
||||||
this._inputSourcesChanged();
|
this._inputSourcesChanged();
|
||||||
|
this._reloading = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_ibusReadyCallback(im, ready) {
|
_ibusReadyCallback(im, ready) {
|
||||||
@ -458,7 +461,15 @@ var InputSourceManager = new Lang.Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
activateInputSource(is, interactive) {
|
activateInputSource(is, interactive) {
|
||||||
KeyboardManager.holdKeyboard();
|
// The focus changes during holdKeyboard/releaseKeyboard may trick
|
||||||
|
// the client into hiding UI containing the currently focused entry.
|
||||||
|
// So holdKeyboard/releaseKeyboard are not called when
|
||||||
|
// 'set-content-type' signal is received.
|
||||||
|
// E.g. Focusing on a password entry in a popup in Xorg Firefox
|
||||||
|
// will emit 'set-content-type' signal.
|
||||||
|
// https://gitlab.gnome.org/GNOME/gnome-shell/issues/391
|
||||||
|
if (!this._reloading)
|
||||||
|
KeyboardManager.holdKeyboard();
|
||||||
this._keyboardManager.apply(is.xkbId);
|
this._keyboardManager.apply(is.xkbId);
|
||||||
|
|
||||||
// All the "xkb:..." IBus engines simply "echo" back symbols,
|
// All the "xkb:..." IBus engines simply "echo" back symbols,
|
||||||
@ -473,7 +484,10 @@ var InputSourceManager = new Lang.Class({
|
|||||||
else
|
else
|
||||||
engine = 'xkb:us::eng';
|
engine = 'xkb:us::eng';
|
||||||
|
|
||||||
this._ibusManager.setEngine(engine, KeyboardManager.releaseKeyboard);
|
if (!this._reloading)
|
||||||
|
this._ibusManager.setEngine(engine, KeyboardManager.releaseKeyboard);
|
||||||
|
else
|
||||||
|
this._ibusManager.setEngine(engine);
|
||||||
this._currentInputSourceChanged(is);
|
this._currentInputSourceChanged(is);
|
||||||
|
|
||||||
if (interactive)
|
if (interactive)
|
||||||
|
Loading…
Reference in New Issue
Block a user