summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--js/ui/main.js13
-rw-r--r--js/ui/windowManager.js9
-rw-r--r--src/main.c21
-rw-r--r--src/shell-global.c31
-rw-r--r--src/shell-global.h1
5 files changed, 61 insertions, 14 deletions
diff --git a/js/ui/main.js b/js/ui/main.js
index a21af899..6218f33d 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -74,7 +74,6 @@ let _startDate;
let _defaultCssStylesheet = null;
let _cssStylesheet = null;
let _a11ySettings = null;
-let dynamicWorkspacesSchema = null;
function _sessionUpdated() {
_loadDefaultStylesheet();
@@ -111,7 +110,6 @@ function start() {
sessionMode = new SessionMode.SessionMode();
sessionMode.connect('updated', _sessionUpdated);
- _initializePrefs();
_initializeUI();
shellDBusService = new ShellDBus.GnomeShell();
@@ -120,17 +118,6 @@ function start() {
_sessionUpdated();
}
-function _initializePrefs() {
- let keys = new Gio.Settings({ schema: sessionMode.overridesSchema }).list_keys();
- for (let i = 0; i < keys.length; i++)
- Meta.prefs_override_preference_schema(keys[i], sessionMode.overridesSchema);
-
- if (keys.indexOf('dynamic-workspaces') > -1)
- dynamicWorkspacesSchema = sessionMode.overridesSchema;
- else
- dynamicWorkspacesSchema = 'org.gnome.mutter';
-}
-
function _initializeUI() {
// Ensure ShellWindowTracker and ShellAppUsage are initialized; this will
// also initialize ShellAppSystem first. ShellAppSystem
diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
index 0b77916b..c2a2d133 100644
--- a/js/ui/windowManager.js
+++ b/js/ui/windowManager.js
@@ -199,12 +199,19 @@ const WorkspaceTracker = new Lang.Class({
global.screen.connect('window-left-monitor', Lang.bind(this, this._windowLeftMonitor));
global.screen.connect('restacked', Lang.bind(this, this._windowsRestacked));
- this._workspaceSettings = new Gio.Settings({ schema: Main.dynamicWorkspacesSchema });
+ this._workspaceSettings = this._getWorkspaceSettings();
this._workspaceSettings.connect('changed::dynamic-workspaces', Lang.bind(this, this._queueCheckWorkspaces));
this._nWorkspacesChanged();
},
+ _getWorkspaceSettings: function() {
+ let settings = global.get_overrides_settings();
+ if (settings.list_keys().indexOf('dynamic-workspaces') > -1)
+ return settings;
+ return new Gio.Settings({ schema: 'org.gnome.mutter' });
+ },
+
_checkWorkspaces: function() {
let i;
let emptyWorkspaces = [];
diff --git a/src/main.c b/src/main.c
index 55f66839..a2f497cf 100644
--- a/src/main.c
+++ b/src/main.c
@@ -34,6 +34,8 @@ extern GType gnome_shell_plugin_get_type (void);
#define SHELL_DBUS_SERVICE "org.gnome.Shell"
#define MAGNIFIER_DBUS_SERVICE "org.gnome.Magnifier"
+#define OVERRIDES_SCHEMA "org.gnome.shell.overrides"
+
#define WM_NAME "GNOME Shell"
#define GNOME_WM_KEYBINDINGS "Mutter,GNOME Shell"
@@ -168,6 +170,23 @@ shell_dbus_init (gboolean replace)
}
static void
+shell_prefs_init (void)
+{
+ ShellGlobal *global = shell_global_get ();
+ GSettings *settings = shell_global_get_overrides_settings (global);
+ char **keys, **k;
+
+ if (!settings)
+ return;
+
+ keys = g_settings_list_keys (settings);
+ for (keys = k = g_settings_list_keys (settings); *k; k++)
+ meta_prefs_override_preference_schema (*k, OVERRIDES_SCHEMA);
+
+ g_strfreev (keys);
+}
+
+static void
shell_introspection_init (void)
{
@@ -434,6 +453,8 @@ main (int argc, char **argv)
_shell_global_init ("session-mode", session_mode, NULL);
+ shell_prefs_init ();
+
ecode = meta_run ();
if (g_getenv ("GNOME_SHELL_ENABLE_CLEANUP"))
diff --git a/src/shell-global.c b/src/shell-global.c
index f945e36f..18e3e099 100644
--- a/src/shell-global.c
+++ b/src/shell-global.c
@@ -1356,6 +1356,37 @@ shell_global_get_settings (ShellGlobal *global)
}
/**
+ * shell_global_get_overrides_settings:
+ * @global: A #ShellGlobal
+ *
+ * Get the session overrides GSettings instance.
+ *
+ * Return value: (transfer none): The GSettings object
+ */
+GSettings *
+shell_global_get_overrides_settings (ShellGlobal *global)
+{
+ static GSettings *settings = NULL;
+ const char *schema;
+
+ g_return_val_if_fail (SHELL_IS_GLOBAL (global), NULL);
+
+ if (!settings)
+ {
+ if (strcmp (global->session_mode, "classic") == 0)
+ schema = "org.gnome.shell.extensions.classic-overrides";
+ else if (strcmp (global->session_mode, "user") == 0)
+ schema = "org.gnome.shell.overrides";
+ else
+ return NULL;
+
+ settings = g_settings_new (schema);
+ }
+
+ return settings;
+}
+
+/**
* shell_global_get_current_time:
* @global: A #ShellGlobal
*
diff --git a/src/shell-global.h b/src/shell-global.h
index 71bdf7d8..a5630ecd 100644
--- a/src/shell-global.h
+++ b/src/shell-global.h
@@ -35,6 +35,7 @@ GdkScreen *shell_global_get_gdk_screen (ShellGlobal *global);
MetaDisplay *shell_global_get_display (ShellGlobal *global);
GList *shell_global_get_window_actors (ShellGlobal *global);
GSettings *shell_global_get_settings (ShellGlobal *global);
+GSettings *shell_global_get_overrides_settings (ShellGlobal *global);
guint32 shell_global_get_current_time (ShellGlobal *global);