[gnome-settings-daemon] xsettings: Explicitly handle classic mode for now



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]