keyboard: Listen to IbusPanelService::focus-in/out to track focus changes
In X11 there's no input panel state requests, so restore the previous behavior that focused entries would always toggle the OSK on there.
This commit is contained in:
parent
7ea034c719
commit
11fb91f60f
@ -119,6 +119,11 @@ var IBusManager = new Lang.Class({
|
||||
let cursorLocation = { x, y, width: w, height: h };
|
||||
this.emit('set-cursor-location', cursorLocation);
|
||||
});
|
||||
this._panelService.connect('focus-in', (panel, path) => {
|
||||
if (!GLib.str_has_suffix(path, '/InputContext_1'))
|
||||
this.emit ('focus-in');
|
||||
});
|
||||
this._panelService.connect('focus-out', () => { this.emit('focus-out'); });
|
||||
|
||||
try {
|
||||
// IBus versions older than 1.5.10 have a bug which
|
||||
|
@ -519,6 +519,12 @@ var FocusTracker = new Lang.Class({
|
||||
|
||||
this._setCurrentRect(rect);
|
||||
});
|
||||
this._ibusManager.connect('focus-in', () => {
|
||||
this.emit('focus-changed', true);
|
||||
});
|
||||
this._ibusManager.connect('focus-out', () => {
|
||||
this.emit('focus-changed', false);
|
||||
});
|
||||
},
|
||||
|
||||
get currentWindow() {
|
||||
@ -590,6 +596,16 @@ var Keyboard = new Lang.Class({
|
||||
this._animFocusedWindow = null;
|
||||
this._oskFocusWindow = null;
|
||||
});
|
||||
this._focusTracker.connect('focus-changed', (tracker, focused) => {
|
||||
// Valid only for X11
|
||||
if (Meta.is_wayland_compositor())
|
||||
return;
|
||||
|
||||
if (focused)
|
||||
this.show(Main.layoutManager.focusIndex);
|
||||
else
|
||||
this.hide();
|
||||
});
|
||||
|
||||
Meta.get_backend().connect('last-device-changed',
|
||||
(backend, deviceId) => {
|
||||
|
Loading…
Reference in New Issue
Block a user