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: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2512>
This commit is contained in:
parent
12032dcc50
commit
ecc3cf8ab1
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user