diff options
author | Benjamin Otte <otte@redhat.com> | 2012-09-19 16:30:27 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2012-10-31 11:09:09 +0100 |
commit | b41215bdeaff963a4ad8be9cda8d841feb612b2b (patch) | |
tree | e78c8dd9b1f98b273d6a5789689f65b1248e5798 | |
parent | 738b453c66b0135c665289b9ffe2b26181cf77dc (diff) | |
download | gtk+-b41215bdeaff963a4ad8be9cda8d841feb612b2b.tar.gz |
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.
-rw-r--r-- | gtk/gtkcssprovider.c | 16 | ||||
-rw-r--r-- | 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); |