[gnome-settings-daemon] xsettings: Explicitly handle classic mode for now
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon] xsettings: Explicitly handle classic mode for now
- Date: Fri, 6 Jun 2014 13:38:19 +0000 (UTC)
commit 1eb4544948276e9e5dcc87d7b53711de72c95ca9
Author: Florian Müllner <fmuellner gnome org>
Date: Thu May 29 19:11:50 2014 +0200
xsettings: Explicitly handle classic mode for now
There are plans to add session-dependent defaults to GSettings
(based on the newly standardized XDG_CURRENT_DESKTOP); until
then, the WM uses a different schema for its button-layout
setting in classic mode. So for the time being, do the same
and pick the alternative schema when XDG_CURRENT_DESKTOP
indicates that we are in a classic session.
(It's not pretty, but hopefully won't be with us for too long ...)
https://bugzilla.gnome.org/show_bug.cgi?id=730629
plugins/xsettings/gsd-xsettings-manager.c | 37 ++++++++++++++++++++++++++++-
1 files changed, 36 insertions(+), 1 deletions(-)
---
diff --git a/plugins/xsettings/gsd-xsettings-manager.c b/plugins/xsettings/gsd-xsettings-manager.c
index 035ed50..40d6dd8 100644
--- a/plugins/xsettings/gsd-xsettings-manager.c
+++ b/plugins/xsettings/gsd-xsettings-manager.c
@@ -60,6 +60,7 @@
#define SOUND_SETTINGS_SCHEMA "org.gnome.desktop.sound"
#define PRIVACY_SETTINGS_SCHEMA "org.gnome.desktop.privacy"
#define WM_SETTINGS_SCHEMA "org.gnome.desktop.wm.preferences"
+#define CLASSIC_WM_SETTINGS_SCHEMA "org.gnome.shell.extensions.classic-overrides"
#define XSETTINGS_PLUGIN_SCHEMA "org.gnome.settings-daemon.plugins.xsettings"
#define XSETTINGS_OVERRIDE_KEY "overrides"
@@ -335,9 +336,26 @@ translate_button_layout (GnomeXSettingsManager *manager,
TranslationEntry *trans,
GVariant *value)
{
- char *layout = g_variant_dup_string (value, NULL);
+ GSettings *classic_settings;
+ GVariant *classic_value = NULL;
+ const char *session;
+ char *layout;
int i;
+ /* Hack: until we get session-dependent defaults in GSettings,
+ * swap out the usual schema for the "classic" one when
+ * running in classic mode
+ */
+ session = g_getenv ("XDG_CURRENT_DESKTOP");
+ classic_settings = g_hash_table_lookup (manager->priv->settings,
+ CLASSIC_WM_SETTINGS_SCHEMA);
+ if (session && strstr (session, "GNOME-Classic") && classic_settings) {
+ classic_value = g_settings_get_value (classic_settings, "button-layout");
+ layout = g_variant_dup_string (classic_value, NULL);
+ } else {
+ layout = g_variant_dup_string (value, NULL);
+ }
+
translate_wm_button_layout_to_gtk (layout);
for (i = 0; manager->priv->managers [i]; i++)
@@ -345,6 +363,8 @@ translate_button_layout (GnomeXSettingsManager *manager,
trans->xsetting_name,
layout);
+ if (classic_value)
+ g_variant_unref (classic_value);
g_free (layout);
}
@@ -945,6 +965,11 @@ find_translation_entry (GSettings *settings, const char *key)
g_object_get (settings, "schema", &schema, NULL);
+ if (g_str_equal (schema, CLASSIC_WM_SETTINGS_SCHEMA)) {
+ g_free (schema);
+ schema = g_strdup (WM_SETTINGS_SCHEMA);
+ }
+
for (i = 0; i < G_N_ELEMENTS (translations); i++) {
if (g_str_equal (schema, translations[i].gsettings_schema) &&
g_str_equal (key, translations[i].gsettings_key)) {
@@ -1108,6 +1133,7 @@ gboolean
gnome_xsettings_manager_start (GnomeXSettingsManager *manager,
GError **error)
{
+ GSettingsSchema *schema;
GVariant *overrides;
guint i;
GList *list, *l;
@@ -1146,6 +1172,15 @@ gnome_xsettings_manager_start (GnomeXSettingsManager *manager,
g_hash_table_insert (manager->priv->settings,
WM_SETTINGS_SCHEMA, g_settings_new (WM_SETTINGS_SCHEMA));
+ schema = g_settings_schema_source_lookup (g_settings_schema_source_get_default (),
+ CLASSIC_WM_SETTINGS_SCHEMA, FALSE);
+ if (schema) {
+ g_hash_table_insert (manager->priv->settings,
+ CLASSIC_WM_SETTINGS_SCHEMA,
+ g_settings_new_full (schema, NULL, NULL));
+ g_settings_schema_unref (schema);
+ }
+
g_signal_connect (G_OBJECT (g_hash_table_lookup (manager->priv->settings,
INTERFACE_SETTINGS_SCHEMA)), "changed::enable-animations",
G_CALLBACK (enable_animations_changed_cb), manager);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]