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




commit b37072693c96e8747ba6357a0c2d0e673505e2be
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      | 19 +++++++++++++++++--
 2 files changed, 30 insertions(+), 2 deletions(-)
---
diff --git a/js/misc/inputMethod.js b/js/misc/inputMethod.js
index ad5f2cf197..bc7e368801 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() {
@@ -24,6 +25,7 @@ var InputMethod = GObject.registerClass({
         this._preeditAnchor = 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));
@@ -200,6 +202,7 @@ var InputMethod = GObject.registerClass({
         this._surroundingText = null;
         this._surroundingTextCursor = null;
         this._preeditStr = null;
+        this._setTerminalMode(false);
     }
 
     vfunc_set_cursor_location(rect) {
@@ -263,11 +266,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 a553440bc8..d508140bc3 100644
--- a/js/ui/keyboard.js
+++ b/js/ui/keyboard.js
@@ -1407,6 +1407,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),
@@ -1602,7 +1605,9 @@ 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)
@@ -1783,11 +1788,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 => {
@@ -2198,6 +2211,8 @@ var KeyboardController = class extends Signals.EventEmitter {
     }
 
     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]