131 lines
5.5 KiB
Diff
131 lines
5.5 KiB
Diff
From 2298cfa0c9083fef432b9c51341f5ee75e7ebacb Mon Sep 17 00:00:00 2001
|
|
From: Ray Strode <rstrode@redhat.com>
|
|
Date: Wed, 16 Aug 2023 11:13:39 -0400
|
|
Subject: [PATCH 2/3] status/keyboard: Load keyboard from system settings if
|
|
gsettings unconfigured
|
|
|
|
Right now if a user hasn't configured their input sources, the code falls back to
|
|
using the current layout on Xorg and the mutter default with wayland.
|
|
|
|
This commit changes the code to instead fall back to using the system
|
|
default (as configured by localed).
|
|
---
|
|
js/ui/status/keyboard.js | 58 +++++++++++++++++++++++++++++++---------
|
|
1 file changed, 45 insertions(+), 13 deletions(-)
|
|
|
|
diff --git a/js/ui/status/keyboard.js b/js/ui/status/keyboard.js
|
|
index 7277c6d099..97e35d482c 100644
|
|
--- a/js/ui/status/keyboard.js
|
|
+++ b/js/ui/status/keyboard.js
|
|
@@ -22,6 +22,9 @@ import * as Util from '../../misc/util.js';
|
|
export const INPUT_SOURCE_TYPE_XKB = 'xkb';
|
|
export const INPUT_SOURCE_TYPE_IBUS = 'ibus';
|
|
|
|
+const DESKTOP_INPUT_SOURCES_SCHEMA = 'org.gnome.desktop.input-sources';
|
|
+const KEY_INPUT_SOURCES = 'sources';
|
|
+
|
|
export const LayoutMenuItem = GObject.registerClass(
|
|
class LayoutMenuItem extends PopupMenu.PopupBaseMenuItem {
|
|
_init(displayName, shortName) {
|
|
@@ -263,17 +266,15 @@ class InputSourceSystemSettings extends InputSourceSettings {
|
|
}
|
|
|
|
class InputSourceSessionSettings extends InputSourceSettings {
|
|
- constructor() {
|
|
+ constructor(settings) {
|
|
super();
|
|
|
|
- this._DESKTOP_INPUT_SOURCES_SCHEMA = 'org.gnome.desktop.input-sources';
|
|
- this._KEY_INPUT_SOURCES = 'sources';
|
|
this._KEY_MRU_SOURCES = 'mru-sources';
|
|
this._KEY_KEYBOARD_OPTIONS = 'xkb-options';
|
|
this._KEY_PER_WINDOW = 'per-window';
|
|
|
|
- this._settings = new Gio.Settings({schema_id: this._DESKTOP_INPUT_SOURCES_SCHEMA});
|
|
- this._settings.connect(`changed::${this._KEY_INPUT_SOURCES}`, this._emitInputSourcesChanged.bind(this));
|
|
+ this._settings = settings;
|
|
+ this._settings.connect(`changed::${KEY_INPUT_SOURCES}`, this._emitInputSourcesChanged.bind(this));
|
|
this._settings.connect(`changed::${this._KEY_KEYBOARD_OPTIONS}`, this._emitKeyboardOptionsChanged.bind(this));
|
|
this._settings.connect(`changed::${this._KEY_PER_WINDOW}`, this._emitPerWindowChanged.bind(this));
|
|
}
|
|
@@ -291,7 +292,7 @@ class InputSourceSessionSettings extends InputSourceSettings {
|
|
}
|
|
|
|
get inputSources() {
|
|
- return this._getSourcesList(this._KEY_INPUT_SOURCES);
|
|
+ return this._getSourcesList(KEY_INPUT_SOURCES);
|
|
}
|
|
|
|
get mruSources() {
|
|
@@ -342,12 +343,6 @@ export class InputSourceManager extends Signals.EventEmitter {
|
|
Meta.KeyBindingFlags.IS_REVERSED,
|
|
Shell.ActionMode.ALL,
|
|
this._switchInputSource.bind(this));
|
|
- if (Main.sessionMode.isGreeter)
|
|
- this._settings = new InputSourceSystemSettings();
|
|
- else
|
|
- this._settings = new InputSourceSessionSettings();
|
|
- this._settings.connect('input-sources-changed', this._inputSourcesChanged.bind(this));
|
|
- this._settings.connect('keyboard-options-changed', this._keyboardOptionsChanged.bind(this));
|
|
|
|
this._xkbInfo = KeyboardManager.getXkbInfo();
|
|
this._keyboardManager = KeyboardManager.getKeyboardManager();
|
|
@@ -359,16 +354,53 @@ export class InputSourceManager extends Signals.EventEmitter {
|
|
this._ibusManager.connect('property-updated', this._ibusPropertyUpdated.bind(this));
|
|
this._ibusManager.connect('set-content-type', this._ibusSetContentType.bind(this));
|
|
|
|
+ this._inputSettings = new Gio.Settings({schema_id: DESKTOP_INPUT_SOURCES_SCHEMA});
|
|
+ this._setupInputSettings();
|
|
+
|
|
global.display.connect('modifiers-accelerator-activated', this._modifiersSwitcher.bind(this));
|
|
|
|
this._sourcesPerWindow = false;
|
|
this._focusWindowNotifyId = 0;
|
|
- this._settings.connect('per-window-changed', this._sourcesPerWindowChanged.bind(this));
|
|
this._sourcesPerWindowChanged();
|
|
this._disableIBus = false;
|
|
this._reloading = false;
|
|
}
|
|
|
|
+ _sessionHasNoInputSettings() {
|
|
+ return this._inputSettings.get_user_value(KEY_INPUT_SOURCES) === null;
|
|
+ }
|
|
+
|
|
+ _reloadInputSettings() {
|
|
+ const hadNoSessionInputSettings = this._hasNoSessionInputSettings;
|
|
+
|
|
+ if (Main.sessionMode.isGreeter)
|
|
+ this._hasNoSessionInputSettings = true;
|
|
+ else
|
|
+ this._hasNoSessionInputSettings = this._sessionHasNoInputSettings();
|
|
+
|
|
+ if (this._settings && hadNoSessionInputSettings === this._hasNoSessionInputSettings)
|
|
+ return;
|
|
+
|
|
+ this._settings?.disconnectObject(this);
|
|
+
|
|
+ if (this._hasNoSessionInputSettings)
|
|
+ this._settings = new InputSourceSystemSettings();
|
|
+ else
|
|
+ this._settings = new InputSourceSessionSettings(this._inputSettings);
|
|
+
|
|
+ this._settings.connectObject('input-sources-changed', this._inputSourcesChanged.bind(this),
|
|
+ 'keyboard-options-changed', this._keyboardOptionsChanged.bind(this),
|
|
+ 'per-window-changed', this._sourcesPerWindowChanged.bind(this), this);
|
|
+ this.reload();
|
|
+ }
|
|
+
|
|
+ _setupInputSettings() {
|
|
+ if (!Main.sessionMode.isGreeter)
|
|
+ this._inputSettings.connect(`changed::${KEY_INPUT_SOURCES}`, this._reloadInputSettings.bind(this));
|
|
+
|
|
+ this._reloadInputSettings();
|
|
+ }
|
|
+
|
|
reload() {
|
|
this._reloading = true;
|
|
this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions);
|
|
--
|
|
2.43.0
|
|
|