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.
This commit is contained in:
@ -2792,6 +2792,22 @@ _gtk_css_provider_load_named (GtkCssProvider *provider,
|
|||||||
g_free (path);
|
g_free (path);
|
||||||
g_free (dir);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -2924,18 +2924,13 @@ settings_update_theme (GtkSettings *settings)
|
|||||||
"gtk-application-prefer-dark-theme", &prefer_dark_theme,
|
"gtk-application-prefer-dark-theme", &prefer_dark_theme,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if (theme_name && *theme_name)
|
if (!theme_name || !*theme_name)
|
||||||
{
|
{
|
||||||
if (prefer_dark_theme)
|
g_free (theme_name);
|
||||||
provider = gtk_css_provider_get_named (theme_name, "dark");
|
theme_name = g_strdup ("Raleigh");
|
||||||
|
|
||||||
if (!provider)
|
|
||||||
provider = gtk_css_provider_get_named (theme_name, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we didn't find the named theme, fall back */
|
provider = gtk_css_provider_get_named (theme_name, prefer_dark_theme ? "dark" : NULL);
|
||||||
if (!provider)
|
|
||||||
provider = gtk_css_provider_get_named ("Raleigh", NULL);
|
|
||||||
|
|
||||||
settings_update_provider (priv->screen, &priv->theme_provider, provider);
|
settings_update_provider (priv->screen, &priv->theme_provider, provider);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user