[gnome-shell/wip/carlosg/osk-updates: 9/21] keyboard: Use extended US keyboard for terminal mode
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/wip/carlosg/osk-updates: 9/21] keyboard: Use extended US keyboard for terminal mode
- Date: Thu, 28 Jul 2022 13:10:23 +0000 (UTC)
commit a83d32cb2e3564d46fc13ddb4e55c66f8b69b10f
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 cc5861015e..a27248cb79 100644
--- a/js/ui/keyboard.js
+++ b/js/ui/keyboard.js
@@ -1406,6 +1406,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),
@@ -1600,7 +1603,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)
@@ -1781,11 +1786,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 => {
@@ -2196,6 +2209,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]