From ecc3cf8ab108c4511e650f4d0f0124b9f98cd8bf Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Mon, 17 Oct 2022 13:34:21 +0200 Subject: [PATCH] inputMethod: Manually reset input context state before unfocus The IBusInputContext currently seems to be a bit sloppy wrt propagating the current state to engines after those are changed, this results in engines possibly ending with purpose/hint/etc that do not actually correspond to the current state. Ensure this state is cleared on unfocus of our IBusInputContext, so that the next time the input method receives an input focus, the new state makes it all the way to the currently active engine. Fixes situations in the GDM/lock screen password entry that IBus would miss the PASSWORD hint set on the StEntry, and let passwords be fed to engines. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5966 Part-of: --- js/misc/inputMethod.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/js/misc/inputMethod.js b/js/misc/inputMethod.js index 07c177b81..3a007d5e9 100644 --- a/js/misc/inputMethod.js +++ b/js/misc/inputMethod.js @@ -187,8 +187,10 @@ var InputMethod = GObject.registerClass({ vfunc_focus_out() { this._currentFocus = null; - if (this._context) + if (this._context) { + this._fullReset(); this._context.focus_out(); + } if (this._preeditStr && this._preeditVisible) { // Unset any preedit text @@ -353,6 +355,13 @@ var InputMethod = GObject.registerClass({ } } + _fullReset() { + this._context.set_content_type(0, 0); + this._context.set_cursor_location(0, 0, 0, 0); + this._context.set_capabilities(0); + this._context.reset(); + } + update() { if (!this._context) return;