[gtk+/wip/683896: 3/4] cssprovider: Move fallback code into _gtk_css_provider_load_named()



commit 27e82920ebb59f4bb1b6244db6f32ce8278ad523
Author: Benjamin Otte <otte redhat com>
Date:   Wed Sep 19 16:30:27 2012 +0200

    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 0c418f8..a15d88e 100644
--- a/gtk/gtkcssprovider.c
+++ b/gtk/gtkcssprovider.c
@@ -2834,6 +2834,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 5939e88..9a25317 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);
 



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