status/keyboard: Always released held keyboard after activating source

As the keyboard is released asynchronously after setting the ibus
engine, there's a possibility that the `this._reloading` property
changed in the meantime.

To ensure that `holdKeyboard()` and `releaseKeyboard()` are correctly
paired, record the condition in a local variable so that it maintains
its value in the callback.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3476>
This commit is contained in:
Florian Müllner 2024-10-11 14:30:44 +02:00 committed by Marge Bot
parent 0a3c12f8d6
commit fb58ceb4c5

View File

@ -503,7 +503,8 @@ export class InputSourceManager extends Signals.EventEmitter {
// 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)
const holdKeyboard = !this._reloading;
if (holdKeyboard)
KeyboardManager.holdKeyboard();
this._keyboardManager.apply(is.xkbId);
@ -520,7 +521,7 @@ export class InputSourceManager extends Signals.EventEmitter {
engine = 'xkb:us::eng';
this._ibusManager.setEngine(engine).then(() => {
if (!this._reloading)
if (holdKeyboard)
KeyboardManager.releaseKeyboard();
});