forked from rpms/gnome-shell
124 lines
3.9 KiB
Diff
124 lines
3.9 KiB
Diff
From 2ea6ae05e579e07f03063e10e560c1339f6599c8 Mon Sep 17 00:00:00 2001
|
|
From: Cosimo Cecchi <cosimo@endlessm.com>
|
|
Date: Mon, 23 May 2016 16:24:50 -0700
|
|
Subject: [PATCH 4/4] keyboard: save the MRU input sources list when switching
|
|
|
|
And restore it when reloading the current list of sources, if
|
|
appropriate.
|
|
|
|
https://bugzilla.gnome.org/show_bug.cgi?id=766826
|
|
---
|
|
js/ui/status/keyboard.js | 61 ++++++++++++++++++++++++++++++++++++++++++++++++
|
|
1 file changed, 61 insertions(+)
|
|
|
|
diff --git a/js/ui/status/keyboard.js b/js/ui/status/keyboard.js
|
|
index 1020994..d4b14d5 100644
|
|
--- a/js/ui/status/keyboard.js
|
|
+++ b/js/ui/status/keyboard.js
|
|
@@ -159,6 +159,14 @@ const InputSourceSettings = new Lang.Class({
|
|
return [];
|
|
},
|
|
|
|
+ get mruSources() {
|
|
+ return [];
|
|
+ },
|
|
+
|
|
+ set mruSources(sourcesList) {
|
|
+ // do nothing
|
|
+ },
|
|
+
|
|
get keyboardOptions() {
|
|
return [];
|
|
},
|
|
@@ -251,6 +259,7 @@ const InputSourceSessionSettings = new Lang.Class({
|
|
|
|
_DESKTOP_INPUT_SOURCES_SCHEMA: 'org.gnome.desktop.input-sources',
|
|
_KEY_INPUT_SOURCES: 'sources',
|
|
+ _KEY_MRU_SOURCES: 'mru-sources',
|
|
_KEY_KEYBOARD_OPTIONS: 'xkb-options',
|
|
_KEY_PER_WINDOW: 'per-window',
|
|
|
|
@@ -277,6 +286,15 @@ const InputSourceSessionSettings = new Lang.Class({
|
|
return this._getSourcesList(this._KEY_INPUT_SOURCES);
|
|
},
|
|
|
|
+ get mruSources() {
|
|
+ return this._getSourcesList(this._KEY_MRU_SOURCES);
|
|
+ },
|
|
+
|
|
+ set mruSources(sourcesList) {
|
|
+ let sources = GLib.Variant.new('a(ss)', sourcesList);
|
|
+ this._settings.set_value(this._KEY_MRU_SOURCES, sources);
|
|
+ },
|
|
+
|
|
get keyboardOptions() {
|
|
return this._settings.get_strv(this._KEY_KEYBOARD_OPTIONS);
|
|
},
|
|
@@ -404,6 +422,25 @@ const InputSourceManager = new Lang.Class({
|
|
this._keyboardManager.reapply();
|
|
},
|
|
|
|
+ _updateMruSettings: function() {
|
|
+ // If IBus is not ready we don't have a full picture of all
|
|
+ // the available sources, so don't update the setting
|
|
+ if (!this._ibusReady)
|
|
+ return;
|
|
+
|
|
+ // If IBus is temporarily disabled, don't update the setting
|
|
+ if (this._disableIBus)
|
|
+ return;
|
|
+
|
|
+ let sourcesList = [];
|
|
+ for (let i = 0; i < this._mruSources.length; ++i) {
|
|
+ let source = this._mruSources[i];
|
|
+ sourcesList.push([source.type, source.id]);
|
|
+ }
|
|
+
|
|
+ this._settings.mruSources = sourcesList;
|
|
+ },
|
|
+
|
|
_currentInputSourceChanged: function(newSource) {
|
|
let oldSource;
|
|
[oldSource, this._currentSource] = [this._currentSource, newSource];
|
|
@@ -438,6 +475,9 @@ const InputSourceManager = new Lang.Class({
|
|
|
|
this._ibusManager.setEngine(engine, KeyboardManager.releaseKeyboard);
|
|
this._currentInputSourceChanged(is);
|
|
+
|
|
+ if (interactive)
|
|
+ this._updateMruSettings();
|
|
},
|
|
|
|
_updateMruSources: function() {
|
|
@@ -452,6 +492,27 @@ const InputSourceManager = new Lang.Class({
|
|
this._mruSourcesBackup = null;
|
|
}
|
|
|
|
+ // Initialize from settings when we have no MRU sources list
|
|
+ if (this._mruSources.length == 0) {
|
|
+ let mruSettings = this._settings.mruSources;
|
|
+ for (let i = 0; i < mruSettings.length; i++) {
|
|
+ let mruSettingSource = mruSettings[i];
|
|
+ let mruSource = null;
|
|
+
|
|
+ for (let j = 0; j < sourcesList.length; j++) {
|
|
+ let source = sourcesList[j];
|
|
+ if (source.type == mruSettingSource.type &&
|
|
+ source.id == mruSettingSource.id) {
|
|
+ mruSource = source;
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (mruSource)
|
|
+ this._mruSources.push(mruSource);
|
|
+ }
|
|
+ }
|
|
+
|
|
let mruSources = [];
|
|
for (let i = 0; i < this._mruSources.length; i++) {
|
|
for (let j = 0; j < sourcesList.length; j++)
|
|
--
|
|
2.7.4
|
|
|