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:
Benjamin Otte 2012-09-19 16:41:19 +02:00
parent b41215bdea
commit b1ad5c8abc

View File

@ -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)
{ {