[gnome-shell/wip/carlosg/osk-updates: 1/4] keyboard: Use extended US keyboard for terminal mode




commit 1a0d7ab8561314b0078e35b7b3f2e8abc1bae1b9
Author: Carlos Garnacho <carlosg gnome org>
Date:   Fri Apr 22 21:16:52 2022 +0200

    keyboard: Use extended US keyboard for terminal mode
    
    If the input hint is "terminal", use the extended keyboard.

 js/misc/inputMethod.js | 13 +++++++++++++
 js/ui/keyboard.js      | 18 ++++++++++++++++--
 2 files changed, 29 insertions(+), 2 deletions(-)
---
diff --git a/js/misc/inputMethod.js b/js/misc/inputMethod.js
index 2d0ceac2b2..ca6cc49fde 100644
--- a/js/misc/inputMethod.js
+++ b/js/misc/inputMethod.js
@@ -12,6 +12,7 @@ var HIDE_PANEL_TIME = 50;
 var InputMethod = GObject.registerClass({
     Signals: {
         'surrounding-text-updated': {},
+        'terminal-mode-changed': {},
     },
 }, class InputMethod extends Clutter.InputMethod {
     _init() {
@@ -23,6 +24,7 @@ var InputMethod = GObject.registerClass({
         this._preeditPos = 0;
         this._preeditVisible = false;
         this._hidePanelId = 0;
+        this.terminalMode = false;
         this._ibus = IBus.Bus.new_async();
         this._ibus.connect('connected', this._onConnected.bind(this));
         this._ibus.connect('disconnected', this._clear.bind(this));
@@ -192,6 +194,7 @@ var InputMethod = GObject.registerClass({
         this._surroundingText = null;
         this._surroundingTextCursor = null;
         this._preeditStr = null;
+        this._setTerminalMode(false);
     }
 
     vfunc_set_cursor_location(rect) {
@@ -255,11 +258,21 @@ var InputMethod = GObject.registerClass({
         else if (purpose == Clutter.InputContentPurpose.PASSWORD)
             ibusPurpose = IBus.InputPurpose.PASSWORD;
 
+        this._setTerminalMode(
+            purpose === Clutter.InputContentPurpose.TERMINAL);
+
         this._purpose = ibusPurpose;
         if (this._context)
             this._context.set_content_type(this._purpose, this._hints);
     }
 
+    _setTerminalMode(terminalMode) {
+        if (this.terminalMode !== terminalMode) {
+            this.terminalMode = terminalMode;
+            this.emit('terminal-mode-changed');
+        }
+    }
+
     vfunc_filter_key_event(event) {
         if (!this._context)
             return false;
diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
index e25954d8bc..5b54166469 100644
--- a/js/ui/keyboard.js
+++ b/js/ui/keyboard.js
@@ -1404,6 +1404,9 @@ var Keyboard = GObject.registerClass({
         // keyboard on RTL locales.
         this.text_direction = Clutter.TextDirection.LTR;
 
+        Main.inputMethod.connect(
+            'terminal-mode-changed', this._onTerminalModeChanged.bind(this));
+
         this._keyboardController.connectObject(
             'active-group', this._onGroupChanged.bind(this),
             'groups-changed', this._onKeyboardGroupsChanged.bind(this),
@@ -1598,7 +1601,8 @@ var Keyboard = GObject.registerClass({
         this._deleteEnabled = enabled;
         this._timesDeleted = 0;
 
-        if (!Main.inputMethod.currentFocus || Main.inputMethod.hasPreedit()) {
+        if (!Main.inputMethod.currentFocus || Main.inputMethod.hasPreedit() ||
+            Main.inputMethod.terminalMode) {
             /* If there is no IM focus or are in the middle of preedit,
              * fallback to keypresses */
             if (enabled)
@@ -1779,11 +1783,19 @@ var Keyboard = GObject.registerClass({
         }
     }
 
-    _onGroupChanged() {
+    _updateKeys() {
         this._ensureKeysForGroup(this._keyboardController.getCurrentGroup());
         this._setActiveLayer(0);
     }
 
+    _onGroupChanged() {
+        this._updateKeys();
+    }
+
+    _onTerminalModeChanged() {
+        this._updateKeys();
+    }
+
     _onKeyboardGroupsChanged() {
         let nonGroupActors = [this._emojiSelection, this._keypad];
         this._aspectContainer.get_children().filter(c => !nonGroupActors.includes(c)).forEach(c => {
@@ -2188,6 +2200,8 @@ var KeyboardController = class {
     }
 
     getCurrentGroup() {
+        if (Main.inputMethod.terminalMode)
+            return 'us-extended';
         return this._currentSource.xkbId;
     }
 


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