[gnome-shell/wip/rstrode/rhel-7.9: 52/86] keyboard: Listen to IbusPanelService::focus-in/out to track focus changes




commit b5e134d771b64f9cd4d9aa39b941f9cdbcb0cc8f
Author: Carlos Garnacho <carlosg gnome org>
Date:   Tue Sep 18 12:54:29 2018 +0200

    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.

 js/misc/ibusManager.js |  6 ++++++
 js/ui/keyboard.js      | 16 ++++++++++++++++
 2 files changed, 22 insertions(+)
---
diff --git a/js/misc/ibusManager.js b/js/misc/ibusManager.js
index deb20fee52..8703593b71 100644
--- a/js/misc/ibusManager.js
+++ b/js/misc/ibusManager.js
@@ -119,6 +119,12 @@ 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) => {
+                // This is ibus' "no focus" input context, so should be ignored
+                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
diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
index 66653d6027..26e9a8de89 100644
--- a/js/ui/keyboard.js
+++ b/js/ui/keyboard.js
@@ -511,6 +511,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() {
@@ -586,6 +592,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) => {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]