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:
parent
dd2cd6286c
commit
46f2c29acc
@ -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) {
|
||||||
|
@ -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'
|
||||||
|
Loading…
Reference in New Issue
Block a user