diff --git a/js/misc/inputMethod.js b/js/misc/inputMethod.js index 0bc1462ef..25b02e35b 100644 --- a/js/misc/inputMethod.js +++ b/js/misc/inputMethod.js @@ -62,9 +62,10 @@ class InputMethod extends Clutter.InputMethod { return; } + this._context.set_client_commit_preedit(true); this._context.connect('commit-text', this._onCommitText.bind(this)); this._context.connect('delete-surrounding-text', this._onDeleteSurroundingText.bind(this)); - this._context.connect('update-preedit-text', this._onUpdatePreeditText.bind(this)); + this._context.connect('update-preedit-text-with-mode', this._onUpdatePreeditText.bind(this)); this._context.connect('show-preedit-text', this._onShowPreeditText.bind(this)); this._context.connect('hide-preedit-text', this._onHidePreeditText.bind(this)); this._context.connect('forward-key-event', this._onForwardKeyEvent.bind(this)); @@ -105,29 +106,30 @@ class InputMethod extends Clutter.InputMethod { } } - _onUpdatePreeditText(_context, text, pos, visible) { + _onUpdatePreeditText(_context, text, pos, visible, mode) { if (text == null) return; let preedit = text.get_text(); if (visible) - this.set_preedit_text(preedit, pos); + this.set_preedit_text(preedit, pos, mode); else if (this._preeditVisible) - this.set_preedit_text(null, pos); + this.set_preedit_text(null, pos, mode); this._preeditStr = preedit; this._preeditPos = pos; this._preeditVisible = visible; + this._preeditCommitMode = mode; } _onShowPreeditText() { this._preeditVisible = true; - this.set_preedit_text(this._preeditStr, this._preeditPos); + this.set_preedit_text(this._preeditStr, this._preeditPos, this._preeditCommitMode); } _onHidePreeditText() { - this.set_preedit_text(null, this._preeditPos); + this.set_preedit_text(null, this._preeditPos, this._preeditCommitMode); this._preeditVisible = false; } @@ -165,7 +167,7 @@ class InputMethod extends Clutter.InputMethod { if (this._preeditStr) { // Unset any preedit text - this.set_preedit_text(null, 0); + this.set_preedit_text(null, 0, this._preeditCommitMode); this._preeditStr = null; } @@ -177,16 +179,16 @@ class InputMethod extends Clutter.InputMethod { } vfunc_reset() { + if (this._preeditStr !== null) { + // Unset any preedit text + this.set_preedit_text(null, 0, Clutter.PreeditResetMode.CLEAR); + this._preeditStr = null; + } + if (this._context) { this._context.reset(); this._emitRequestSurrounding(); } - - if (this._preeditStr) { - // Unset any preedit text - this.set_preedit_text(null, 0); - this._preeditStr = null; - } } vfunc_set_cursor_location(rect) { diff --git a/meson.build b/meson.build index 41f5b02a3..5c891a504 100644 --- a/meson.build +++ b/meson.build @@ -30,7 +30,7 @@ mutter_req = '>= 41.beta' polkit_req = '>= 0.100' schemas_req = '>= 41.alpha' startup_req = '>= 0.11' -ibus_req = '>= 1.5.2' +ibus_req = '>= 1.5.19' gnome_desktop_req = '>= 3.35.90' bt_req = '>= 3.9.0'