inputMethod: Keep track of preedit string visibility
So we can silence update-preedit-text signals that keep the
preedit string invisible.
Closes: https://gitlab.gnome.org/GNOME/gtk/issues/1447
(cherry-picked from 6f5a099184
)
This commit is contained in:
parent
4010628001
commit
1cda659732
@ -17,6 +17,7 @@ var InputMethod = new Lang.Class({
|
|||||||
this._currentFocus = null;
|
this._currentFocus = null;
|
||||||
this._preeditStr = '';
|
this._preeditStr = '';
|
||||||
this._preeditPos = 0;
|
this._preeditPos = 0;
|
||||||
|
this._preeditVisible = false;
|
||||||
this._ibus = IBus.Bus.new_async();
|
this._ibus = IBus.Bus.new_async();
|
||||||
this._ibus.connect('connected', this._onConnected.bind(this));
|
this._ibus.connect('connected', this._onConnected.bind(this));
|
||||||
this._ibus.connect('disconnected', this._clear.bind(this));
|
this._ibus.connect('disconnected', this._clear.bind(this));
|
||||||
@ -80,6 +81,7 @@ var InputMethod = new Lang.Class({
|
|||||||
this._enabled = false;
|
this._enabled = false;
|
||||||
this._preeditStr = ''
|
this._preeditStr = ''
|
||||||
this._preeditPos = 0;
|
this._preeditPos = 0;
|
||||||
|
this._preeditVisible = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_emitRequestSurrounding() {
|
_emitRequestSurrounding() {
|
||||||
@ -98,20 +100,27 @@ var InputMethod = new Lang.Class({
|
|||||||
_onUpdatePreeditText(context, text, pos, visible) {
|
_onUpdatePreeditText(context, text, pos, visible) {
|
||||||
if (text == null)
|
if (text == null)
|
||||||
return;
|
return;
|
||||||
this._preeditStr = text.get_text();
|
|
||||||
this._preeditPos = pos;
|
let preedit = text.get_text();
|
||||||
|
|
||||||
if (visible)
|
if (visible)
|
||||||
this.set_preedit_text(this._preeditStr, pos);
|
this.set_preedit_text(preedit, pos);
|
||||||
else
|
else if (this._preeditVisible)
|
||||||
this.set_preedit_text(null, pos);
|
this.set_preedit_text(null, pos);
|
||||||
|
|
||||||
|
this._preeditStr = preedit;
|
||||||
|
this._preeditPos = pos;
|
||||||
|
this._preeditVisible = visible;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onShowPreeditText(context) {
|
_onShowPreeditText(context) {
|
||||||
|
this._preeditVisible = true;
|
||||||
this.set_preedit_text(this._preeditStr, this._preeditPos);
|
this.set_preedit_text(this._preeditStr, this._preeditPos);
|
||||||
},
|
},
|
||||||
|
|
||||||
_onHidePreeditText(context) {
|
_onHidePreeditText(context) {
|
||||||
this.set_preedit_text(null, this._preeditPos);
|
this.set_preedit_text(null, this._preeditPos);
|
||||||
|
this._preeditVisible = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onForwardKeyEvent(context, keyval, keycode, state) {
|
_onForwardKeyEvent(context, keyval, keycode, state) {
|
||||||
|
Loading…
Reference in New Issue
Block a user