From 3a4bd9578d82c662f85c779f47bc8b6659c6864c Mon Sep 17 00:00:00 2001 From: Thomas Wood Date: Sun, 4 Mar 2007 17:17:47 +0000 Subject: [PATCH] Move gtkrc-utils from capplets/theme-switcher to capplets/common. 2007-03-04 Thomas Wood * Makefile.am: * gtkrc-utils.c: (gtkrc_get_details): * gtkrc-utils.h: Move gtkrc-utils from capplets/theme-switcher to capplets/common. * gnome-theme-info.c: (gnome_theme_read_meta_theme): Search the gtkrc for the colour scheme if none was found in the metatheme file. Fixes a problem when comparing two metathemes which only differ by the colour scheme setting. svn path=/trunk/; revision=7356 --- capplets/common/ChangeLog | 11 ++++ capplets/common/Makefile.am | 3 +- capplets/common/gnome-theme-info.c | 8 +++ .../{theme-switcher => common}/gtkrc-utils.c | 60 ++++++++++++++++++- .../{theme-switcher => common}/gtkrc-utils.h | 2 +- capplets/theme-switcher/ChangeLog | 7 +++ capplets/theme-switcher/Makefile.am | 4 +- 7 files changed, 89 insertions(+), 6 deletions(-) rename capplets/{theme-switcher => common}/gtkrc-utils.c (69%) rename capplets/{theme-switcher => common}/gtkrc-utils.h (72%) diff --git a/capplets/common/ChangeLog b/capplets/common/ChangeLog index 433d8e4ff..6aa26a6bf 100644 --- a/capplets/common/ChangeLog +++ b/capplets/common/ChangeLog @@ -1,3 +1,14 @@ +2007-03-04 Thomas Wood + + * Makefile.am: + * gtkrc-utils.c: (gtkrc_get_details): + * gtkrc-utils.h: + Move gtkrc-utils from theme-switcher to here. + + * gnome-theme-info.c: (gnome_theme_read_meta_theme): Search the gtkrc for + the colour scheme if none was found in the metatheme file. Fixes a problem + when comparing two metathemes which only differ by the colour scheme setting. + 2007-02-28 Thomas Wood * gnome-theme-apply.c: (gnome_meta_theme_set): Set the gtk-color-scheme even diff --git a/capplets/common/Makefile.am b/capplets/common/Makefile.am index b441ab386..d9277601e 100644 --- a/capplets/common/Makefile.am +++ b/capplets/common/Makefile.am @@ -28,7 +28,8 @@ libcommon_la_SOURCES = \ wm-common.c wm-common.h \ capplet-stock-icons.c capplet-stock-icons.h \ theme-thumbnail.c theme-thumbnail.h \ - gnome-theme-apply.c gnome-theme-apply.h + gnome-theme-apply.c gnome-theme-apply.h \ + gtkrc-utils.c gtkrc-utils.h libcommon_la_LIBADD = $(top_builddir)/libbackground/libbackground.la \ $(top_builddir)/libwindow-settings/libgnome-window-settings.la \ diff --git a/capplets/common/gnome-theme-info.c b/capplets/common/gnome-theme-info.c index 9f973b536..0d0f0743a 100644 --- a/capplets/common/gnome-theme-info.c +++ b/capplets/common/gnome-theme-info.c @@ -6,6 +6,7 @@ #include #include #include "gnome-theme-info.h" +#include "gtkrc-utils.h" #define THEME_NAME "X-GNOME-Metatheme/Name" #define THEME_COMMENT "X-GNOME-Metatheme/Comment" @@ -354,6 +355,13 @@ gnome_theme_read_meta_theme (GnomeVFSURI *meta_theme_uri) meta_theme_info->gtk_theme_name = g_strdup (str); str = gnome_desktop_item_get_string (meta_theme_ditem, GTK_COLOR_SCHEME_KEY); + if (str == NULL) + { + /* try to find the color scheme from the gtkrc */ + gchar *gtkrc_file = gtkrc_find_named (meta_theme_info->gtk_theme_name); + str = gtkrc_get_color_scheme (gtkrc_file); + g_free (gtkrc_file); + } if (str != NULL) { gchar *a; diff --git a/capplets/theme-switcher/gtkrc-utils.c b/capplets/common/gtkrc-utils.c similarity index 69% rename from capplets/theme-switcher/gtkrc-utils.c rename to capplets/common/gtkrc-utils.c index 70c2cf996..c776b86ef 100644 --- a/capplets/theme-switcher/gtkrc-utils.c +++ b/capplets/common/gtkrc-utils.c @@ -5,7 +5,7 @@ #define INCLUDE_SYMBOL ((gpointer) 1) #define ENGINE_SYMBOL ((gpointer) 2) -#define SYMBOLIC_COLOR_SYMBOL ((gpointer) 3) +#define COLOR_SCHEME_SYMBOL ((gpointer) 3) static gint str_nequal (gchar *a, gchar *b) @@ -135,4 +135,62 @@ gtkrc_get_details (gchar *filename, GSList **engines, GSList **symbolic_colors) } +gchar * +gtkrc_get_color_scheme (gchar *filename) +{ + gint file = -1; + gchar *result = NULL; + GSList *files = NULL; + GSList *read_files = NULL; + GTokenType token; + GScanner *scanner = g_scanner_new (NULL); + + g_scanner_scope_add_symbol (scanner, 0, "include", INCLUDE_SYMBOL); + g_scanner_scope_add_symbol (scanner, 0, "gtk_color_scheme", COLOR_SCHEME_SYMBOL); + + files = g_slist_prepend (files, g_strdup (filename)); + while (files != NULL) + { + filename = files->data; + files = g_slist_delete_link (files, files); + + if (g_slist_find_custom (read_files, filename, (GCompareFunc) str_nequal)) + { + g_warning ("Recursion in the gtkrc detected!"); + continue; /* skip this file since we've done it before... */ + } + + read_files = g_slist_prepend (read_files, filename); + + file = g_open (filename, O_RDONLY); + if (file == -1) + { + g_warning ("Could not open file \"%s\"", filename); + } + else + { + g_scanner_input_file (scanner, file); + while ((token = g_scanner_get_next_token (scanner)) != G_TOKEN_EOF) + { + GTokenType string_token; + + if (token != G_TOKEN_SYMBOL) + continue; + if (scanner->value.v_symbol == COLOR_SCHEME_SYMBOL) + { + if (g_scanner_get_next_token (scanner) != '=') + continue; + string_token = g_scanner_get_next_token (scanner); + if (string_token != G_TOKEN_STRING) + continue; + if (result) + g_free (result); + result = g_strdup (scanner->value.v_string); + } + } + } + } + return result; +} + diff --git a/capplets/theme-switcher/gtkrc-utils.h b/capplets/common/gtkrc-utils.h similarity index 72% rename from capplets/theme-switcher/gtkrc-utils.h rename to capplets/common/gtkrc-utils.h index 8b2212124..ddfeec3ea 100644 --- a/capplets/theme-switcher/gtkrc-utils.h +++ b/capplets/common/gtkrc-utils.h @@ -2,4 +2,4 @@ void gtkrc_get_details (gchar *filename, GSList **engines, GSList **symbolic_colors); gchar * gtkrc_find_named (const gchar *name); - +gchar * gtkrc_get_color_scheme (gchar *filename); diff --git a/capplets/theme-switcher/ChangeLog b/capplets/theme-switcher/ChangeLog index 4c0f1f248..5f2e1aac7 100644 --- a/capplets/theme-switcher/ChangeLog +++ b/capplets/theme-switcher/ChangeLog @@ -1,3 +1,10 @@ +2007-03-04 Thomas Wood + + * Makefile.am: + * gtkrc-utils.c: + * gtkrc-utils.h: + Move gtkrc-utils into capplets/common + 2007-02-28 Thomas Wood * gnome-theme-details.c: (load_theme_names): Replace a deprecated function diff --git a/capplets/theme-switcher/Makefile.am b/capplets/theme-switcher/Makefile.am index 311fcb72c..e867253ed 100644 --- a/capplets/theme-switcher/Makefile.am +++ b/capplets/theme-switcher/Makefile.am @@ -21,9 +21,7 @@ gnome_theme_manager_SOURCES = \ gnome-theme-details.c \ gnome-theme-details.h \ gnome-theme-installer.c \ - gnome-theme-installer.h \ - gtkrc-utils.c \ - gtkrc-utils.h + gnome-theme-installer.h gnome_theme_manager_LDFLAGS = -export-dynamic