diff --git a/js/misc/ibusManager.js b/js/misc/ibusManager.js index 9e5eadbbb..a4931cfb9 100644 --- a/js/misc/ibusManager.js +++ b/js/misc/ibusManager.js @@ -275,15 +275,12 @@ class IBusManager extends Signals.EventEmitter { return this._engines.get(id); } - async _setEngine(id, callback) { + async _setEngine(id) { // Send id even if id == this._currentEngineName // because 'properties-registered' signal can be emitted // while this._ibusSources == null on a lock screen. - if (!this._ready) { - if (callback) - callback(); + if (!this._ready) return; - } try { await this._ibus.set_global_engine_async(id, @@ -293,12 +290,9 @@ class IBusManager extends Signals.EventEmitter { if (!e.matches(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED)) logError(e); } - - if (callback) - callback(); } - async setEngine(id, callback) { + async setEngine(id) { if (this._oskCompletion) this._preOskEngine = id; @@ -307,9 +301,9 @@ class IBusManager extends Signals.EventEmitter { return; if (this._oskCompletion) - this.setCompletionEnabled(false, callback); + await this.setCompletionEnabled(false); else - await this._setEngine(id, callback); + await this._setEngine(id); } preloadEngines(ids) { @@ -339,7 +333,7 @@ class IBusManager extends Signals.EventEmitter { }); } - setCompletionEnabled(enabled, callback) { + async setCompletionEnabled(enabled) { /* Needs typing-booster available */ if (enabled && !this._engines.has(TYPING_BOOSTER_ENGINE)) return false; @@ -354,9 +348,9 @@ class IBusManager extends Signals.EventEmitter { if (enabled) { this._preOskEngine = this._currentEngineName; - this._setEngine(TYPING_BOOSTER_ENGINE, callback); + await this._setEngine(TYPING_BOOSTER_ENGINE); } else if (this._preOskEngine) { - this._setEngine(this._preOskEngine, callback); + await this._setEngine(this._preOskEngine); delete this._preOskEngine; } return true; diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index 182b88e8e..908655951 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -2105,12 +2105,18 @@ class KeyboardController extends Signals.EventEmitter { Main.inputMethod.commit(str); } - set oskCompletion(enabled) { + async _setOskCompletion(enabled) { if (this._oskCompletionEnabled === enabled) return; this._oskCompletionEnabled = - IBusManager.getIBusManager().setCompletionEnabled(enabled, () => Main.inputMethod.update()); + await IBusManager.getIBusManager().setCompletionEnabled(enabled); + + Main.inputMethod.update(); + } + + set oskCompletion(enabled) { + this._setOskCompletion(enabled); } keyvalPress(keyval) { diff --git a/js/ui/status/keyboard.js b/js/ui/status/keyboard.js index e8dc1bafe..d900d3ed7 100644 --- a/js/ui/status/keyboard.js +++ b/js/ui/status/keyboard.js @@ -495,7 +495,7 @@ export class InputSourceManager extends Signals.EventEmitter { this._changePerWindowSource(); } - activateInputSource(is, interactive) { + async activateInputSource(is, interactive) { // 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 @@ -519,10 +519,10 @@ export class InputSourceManager extends Signals.EventEmitter { else engine = 'xkb:us::eng'; + await this._ibusManager.setEngine(engine); if (!this._reloading) - this._ibusManager.setEngine(engine, KeyboardManager.releaseKeyboard); - else - this._ibusManager.setEngine(engine); + KeyboardManager.releaseKeyboard(); + this._currentInputSourceChanged(is); if (interactive)