inputMethod: Use update-preedit-with-mode signal

This signal announces the preferred commit mode of the preedit text when
the input context is reset. Keep this mode around, and ensure to honor this
mode (e.g. maybe commit the preedit string) whenever the input method would
be reset.

This is delegated to the internal layers, so propagate this mode via
clutter_input_method_set_preedit_text().

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1929>
This commit is contained in:
Carlos Garnacho 2021-07-27 16:52:32 +02:00 committed by Marge Bot
parent dd2cd6286c
commit 46f2c29acc
2 changed files with 16 additions and 14 deletions

View File

@ -62,9 +62,10 @@ class InputMethod extends Clutter.InputMethod {
return; return;
} }
this._context.set_client_commit_preedit(true);
this._context.connect('commit-text', this._onCommitText.bind(this)); this._context.connect('commit-text', this._onCommitText.bind(this));
this._context.connect('delete-surrounding-text', this._onDeleteSurroundingText.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('show-preedit-text', this._onShowPreeditText.bind(this));
this._context.connect('hide-preedit-text', this._onHidePreeditText.bind(this)); this._context.connect('hide-preedit-text', this._onHidePreeditText.bind(this));
this._context.connect('forward-key-event', this._onForwardKeyEvent.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) if (text == null)
return; return;
let preedit = text.get_text(); let preedit = text.get_text();
if (visible) if (visible)
this.set_preedit_text(preedit, pos); this.set_preedit_text(preedit, pos, mode);
else if (this._preeditVisible) else if (this._preeditVisible)
this.set_preedit_text(null, pos); this.set_preedit_text(null, pos, mode);
this._preeditStr = preedit; this._preeditStr = preedit;
this._preeditPos = pos; this._preeditPos = pos;
this._preeditVisible = visible; this._preeditVisible = visible;
this._preeditCommitMode = mode;
} }
_onShowPreeditText() { _onShowPreeditText() {
this._preeditVisible = true; this._preeditVisible = true;
this.set_preedit_text(this._preeditStr, this._preeditPos); this.set_preedit_text(this._preeditStr, this._preeditPos, this._preeditCommitMode);
} }
_onHidePreeditText() { _onHidePreeditText() {
this.set_preedit_text(null, this._preeditPos); this.set_preedit_text(null, this._preeditPos, this._preeditCommitMode);
this._preeditVisible = false; this._preeditVisible = false;
} }
@ -165,7 +167,7 @@ class InputMethod extends Clutter.InputMethod {
if (this._preeditStr) { if (this._preeditStr) {
// Unset any preedit text // Unset any preedit text
this.set_preedit_text(null, 0); this.set_preedit_text(null, 0, this._preeditCommitMode);
this._preeditStr = null; this._preeditStr = null;
} }
@ -177,16 +179,16 @@ class InputMethod extends Clutter.InputMethod {
} }
vfunc_reset() { 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) { if (this._context) {
this._context.reset(); this._context.reset();
this._emitRequestSurrounding(); this._emitRequestSurrounding();
} }
if (this._preeditStr) {
// Unset any preedit text
this.set_preedit_text(null, 0);
this._preeditStr = null;
}
} }
vfunc_set_cursor_location(rect) { vfunc_set_cursor_location(rect) {

View File

@ -30,7 +30,7 @@ mutter_req = '>= 41.beta'
polkit_req = '>= 0.100' polkit_req = '>= 0.100'
schemas_req = '>= 41.alpha' schemas_req = '>= 41.alpha'
startup_req = '>= 0.11' startup_req = '>= 0.11'
ibus_req = '>= 1.5.2' ibus_req = '>= 1.5.19'
gnome_desktop_req = '>= 3.35.90' gnome_desktop_req = '>= 3.35.90'
bt_req = '>= 3.9.0' bt_req = '>= 3.9.0'