inputMethod: Handle OSK hiding after unfocus

Set a small timeout in order to let focus changes preserve OSK state. If
focus is eventually unset, the OSK will be hidden.

https://gitlab.gnome.org/GNOME/gtk/issues/1277
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/397
This commit is contained in:
Carlos Garnacho 2019-02-08 23:00:18 +01:00 committed by Carlos Garnacho
parent 561cecf383
commit fb80831269

View File

@ -1,8 +1,10 @@
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
const { Clutter, GObject, IBus } = imports.gi;
const { Clutter, GLib, GObject, IBus } = imports.gi;
const Keyboard = imports.ui.status.keyboard;
var HIDE_PANEL_TIME = 50;
var InputMethod = GObject.registerClass(
class InputMethod extends Clutter.InputMethod {
_init() {
@ -13,6 +15,7 @@ class InputMethod extends Clutter.InputMethod {
this._preeditStr = '';
this._preeditPos = 0;
this._preeditVisible = false;
this._hidePanelId = 0;
this._ibus = IBus.Bus.new_async();
this._ibus.connect('connected', this._onConnected.bind(this));
this._ibus.connect('disconnected', this._clear.bind(this));
@ -136,6 +139,11 @@ class InputMethod extends Clutter.InputMethod {
this._updateCapabilities();
this._emitRequestSurrounding();
}
if (this._hidePanelId) {
GLib.source_remove(this._hidePanelId);
this._hidePanelId = 0;
}
}
vfunc_focus_out() {
@ -150,6 +158,12 @@ class InputMethod extends Clutter.InputMethod {
this.set_preedit_text(null, 0);
this._preeditStr = null;
}
this._hidePanelId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, HIDE_PANEL_TIME, () => {
this.set_input_panel_state(Clutter.InputPanelState.OFF);
this._hidePanelId = 0;
return GLib.SOURCE_REMOVE;
});
}
vfunc_reset() {