[gtk+/settings-keyfile] Parse a per-theme settings.ini file



commit 1a2d9e30900453db30ac37809d46348d2e1dc87b
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Jan 26 11:18:11 2011 -0500

    Parse a per-theme settings.ini file
    
    This lets themes override settings values again. We are using
    the same priority that was used from the rc file parser, so things
    are largely unchanged, relative to other settings sources.

 gtk/gtksettings.c |   21 +++++++++++++++++++--
 1 files changed, 19 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c
index 6109d8c..3289b91 100644
--- a/gtk/gtksettings.c
+++ b/gtk/gtksettings.c
@@ -29,7 +29,7 @@
 #include "gtkintl.h"
 #include "gtkwidget.h"
 #include "gtkprivate.h"
-#include "gtkcssprovider.h"
+#include "gtkcssproviderprivate.h"
 #include "gtksymboliccolor.h"
 #include "gtktypebuiltins.h"
 #include "gtkversion.h"
@@ -2685,7 +2685,6 @@ settings_update_theme (GtkSettings *settings)
         variant = "dark";
 
       new_provider = gtk_css_provider_get_named (theme_name, variant);
-      g_free (theme_name);
     }
 
   if (new_provider != provider)
@@ -2705,6 +2704,24 @@ settings_update_theme (GtkSettings *settings)
       g_object_set_qdata_full (G_OBJECT (settings), quark_theme_name,
                                new_provider, (GDestroyNotify) g_object_unref);
     }
+
+  if (theme_name && *theme_name)
+    {
+      gchar *theme_dir;
+      gchar *path;
+
+      /* reload per-theme settings */
+      theme_dir = _gtk_css_provider_get_theme_dir ();
+      path = g_build_filename (theme_dir, theme_name, "gtk-3.0", "settings.ini", NULL);
+
+     if (g_file_test (path, G_FILE_TEST_EXISTS))
+       gtk_settings_load_from_key_file (settings, path, GTK_SETTINGS_SOURCE_RC_FILE);
+
+      g_free (theme_dir);
+      g_free (path);
+    }
+
+  g_free (theme_name);
 }
 
 static gboolean



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]