From b41215bdeaff963a4ad8be9cda8d841feb612b2b Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Wed, 19 Sep 2012 16:30:27 +0200 Subject: [PATCH] cssprovider: Move fallback code into _gtk_css_provider_load_named() This makes sure the full theme loading logic resides in one function and isn't scattered around. As a side-effect, the hash table kept by gtk_css_provider_get_named() will now be populated with fallback themes. This will not be a problem after the next commit though. --- gtk/gtkcssprovider.c | 16 ++++++++++++++++ gtk/gtksettings.c | 15 +++++---------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c index 92506ee6d2..6f9e758f0d 100644 --- a/gtk/gtkcssprovider.c +++ b/gtk/gtkcssprovider.c @@ -2792,6 +2792,22 @@ _gtk_css_provider_load_named (GtkCssProvider *provider, g_free (path); g_free (dir); } + else + { + /* Things failed! Fall back! Fall back! */ + + if (variant) + { + /* If there was a variant, try without */ + _gtk_css_provider_load_named (provider, name, NULL); + } + else + { + /* Worst case, fall back to Raleigh */ + g_return_if_fail (!g_str_equal (name, "Raleigh")); /* infloop protection */ + _gtk_css_provider_load_named (provider, "Raleigh", NULL); + } + } } /** diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c index 5939e88066..9a253172c2 100644 --- a/gtk/gtksettings.c +++ b/gtk/gtksettings.c @@ -2924,18 +2924,13 @@ settings_update_theme (GtkSettings *settings) "gtk-application-prefer-dark-theme", &prefer_dark_theme, NULL); - if (theme_name && *theme_name) + if (!theme_name || !*theme_name) { - if (prefer_dark_theme) - provider = gtk_css_provider_get_named (theme_name, "dark"); - - if (!provider) - provider = gtk_css_provider_get_named (theme_name, NULL); + g_free (theme_name); + theme_name = g_strdup ("Raleigh"); } - - /* If we didn't find the named theme, fall back */ - if (!provider) - provider = gtk_css_provider_get_named ("Raleigh", NULL); + + provider = gtk_css_provider_get_named (theme_name, prefer_dark_theme ? "dark" : NULL); settings_update_provider (priv->screen, &priv->theme_provider, provider);