settings: Use _gtk_css_provider_load_named()
This way we create one provider per settings object instead of stuffing it into a global unchanging never-deleting hash table. Also, we now reload the theme when instructed instead of keeping the old loaded (and possibly stale) data forever. https://bugzilla.gnome.org/show_bug.cgi?id=683896
This commit is contained in:
parent
b41215bdea
commit
b1ad5c8abc
@ -293,6 +293,8 @@ gtk_settings_init (GtkSettings *settings)
|
|||||||
g_datalist_init (&priv->queued_settings);
|
g_datalist_init (&priv->queued_settings);
|
||||||
object_list = g_slist_prepend (object_list, settings);
|
object_list = g_slist_prepend (object_list, settings);
|
||||||
|
|
||||||
|
priv->theme_provider = gtk_css_provider_new ();
|
||||||
|
|
||||||
/* build up property array for all yet existing properties and queue
|
/* build up property array for all yet existing properties and queue
|
||||||
* notification for them (at least notification for internal properties
|
* notification for them (at least notification for internal properties
|
||||||
* will instantly be caught)
|
* will instantly be caught)
|
||||||
@ -1612,6 +1614,10 @@ settings_init_style (GtkSettings *settings)
|
|||||||
GTK_STYLE_PROVIDER (settings),
|
GTK_STYLE_PROVIDER (settings),
|
||||||
GTK_STYLE_PROVIDER_PRIORITY_SETTINGS);
|
GTK_STYLE_PROVIDER_PRIORITY_SETTINGS);
|
||||||
|
|
||||||
|
gtk_style_context_add_provider_for_screen (screen,
|
||||||
|
GTK_STYLE_PROVIDER (settings->priv->theme_provider),
|
||||||
|
GTK_STYLE_PROVIDER_PRIORITY_SETTINGS);
|
||||||
|
|
||||||
settings_update_theme (settings);
|
settings_update_theme (settings);
|
||||||
settings_update_key_theme (settings);
|
settings_update_key_theme (settings);
|
||||||
}
|
}
|
||||||
@ -2915,7 +2921,6 @@ static void
|
|||||||
settings_update_theme (GtkSettings *settings)
|
settings_update_theme (GtkSettings *settings)
|
||||||
{
|
{
|
||||||
GtkSettingsPrivate *priv = settings->priv;
|
GtkSettingsPrivate *priv = settings->priv;
|
||||||
GtkCssProvider *provider = NULL;
|
|
||||||
gboolean prefer_dark_theme;
|
gboolean prefer_dark_theme;
|
||||||
gchar *theme_name;
|
gchar *theme_name;
|
||||||
|
|
||||||
@ -2930,9 +2935,9 @@ settings_update_theme (GtkSettings *settings)
|
|||||||
theme_name = g_strdup ("Raleigh");
|
theme_name = g_strdup ("Raleigh");
|
||||||
}
|
}
|
||||||
|
|
||||||
provider = gtk_css_provider_get_named (theme_name, prefer_dark_theme ? "dark" : NULL);
|
_gtk_css_provider_load_named (priv->theme_provider,
|
||||||
|
theme_name,
|
||||||
settings_update_provider (priv->screen, &priv->theme_provider, provider);
|
prefer_dark_theme ? "dark" : NULL);
|
||||||
|
|
||||||
if (theme_name && *theme_name)
|
if (theme_name && *theme_name)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user