From fb58ceb4c5cf1ce60666229df25f4bbdb4934789 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 11 Oct 2024 14:30:44 +0200 Subject: [PATCH] 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: --- js/ui/status/keyboard.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/js/ui/status/keyboard.js b/js/ui/status/keyboard.js index 3be8f2cba..c0153ef8d 100644 --- a/js/ui/status/keyboard.js +++ b/js/ui/status/keyboard.js @@ -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(); });