summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2018-11-13 18:28:15 +0100
committerCarlos Garnacho <carlosg@gnome.org>2018-11-13 18:52:15 +0100
commit6f5a099184a1a5ecf558b36f2d00d2bfb074628e (patch)
tree98d5e13a024aefd7095d3ad7b5ddc8a29ddc91dc
parent8c3811a866017943c276fa7d9e2aed4c0f0554ae (diff)
downloadgnome-shell-6f5a099184a1a5ecf558b36f2d00d2bfb074628e.tar.gz
inputMethod: Keep track of preedit string visibility
So we can silence update-preedit-text signals that keep the preedit string invisible. https://gitlab.gnome.org/GNOME/gtk/issues/1447
-rw-r--r--js/misc/inputMethod.js17
1 files changed, 13 insertions, 4 deletions
diff --git a/js/misc/inputMethod.js b/js/misc/inputMethod.js
index e22dfccc5..0f5590b3f 100644
--- a/js/misc/inputMethod.js
+++ b/js/misc/inputMethod.js
@@ -17,6 +17,7 @@ var InputMethod = new Lang.Class({
this._currentFocus = null;
this._preeditStr = '';
this._preeditPos = 0;
+ this._preeditVisible = false;
this._ibus = IBus.Bus.new_async();
this._ibus.connect('connected', this._onConnected.bind(this));
this._ibus.connect('disconnected', this._clear.bind(this));
@@ -80,6 +81,7 @@ var InputMethod = new Lang.Class({
this._enabled = false;
this._preeditStr = ''
this._preeditPos = 0;
+ this._preeditVisible = false;
},
_emitRequestSurrounding() {
@@ -98,20 +100,27 @@ var InputMethod = new Lang.Class({
_onUpdatePreeditText(context, text, pos, visible) {
if (text == null)
return;
- this._preeditStr = text.get_text();
- this._preeditPos = pos;
+
+ let preedit = text.get_text();
+
if (visible)
- this.set_preedit_text(this._preeditStr, pos);
- else
+ this.set_preedit_text(preedit, pos);
+ else if (this._preeditVisible)
this.set_preedit_text(null, pos);
+
+ this._preeditStr = preedit;
+ this._preeditPos = pos;
+ this._preeditVisible = visible;
},
_onShowPreeditText(context) {
+ this._preeditVisible = true;
this.set_preedit_text(this._preeditStr, this._preeditPos);
},
_onHidePreeditText(context) {
this.set_preedit_text(null, this._preeditPos);
+ this._preeditVisible = false;
},
_onForwardKeyEvent(context, keyval, keycode, state) {