diff options
author | Benjamin Otte <otte@redhat.com> | 2012-09-19 16:41:19 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2012-10-31 11:09:10 +0100 |
commit | b1ad5c8abc2ca054bbf19ffddfb0a0af7195e50c (patch) | |
tree | 42ebdcd86a48273ac7fe653eba58cc233a10d2a0 | |
parent | b41215bdeaff963a4ad8be9cda8d841feb612b2b (diff) | |
download | gtk+-b1ad5c8abc2ca054bbf19ffddfb0a0af7195e50c.tar.gz |
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
-rw-r--r-- | gtk/gtksettings.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c index 9a253172c2..47328f1049 100644 --- a/gtk/gtksettings.c +++ b/gtk/gtksettings.c @@ -293,6 +293,8 @@ gtk_settings_init (GtkSettings *settings) g_datalist_init (&priv->queued_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 * notification for them (at least notification for internal properties * will instantly be caught) @@ -1612,6 +1614,10 @@ settings_init_style (GtkSettings *settings) GTK_STYLE_PROVIDER (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_key_theme (settings); } @@ -2915,7 +2921,6 @@ static void settings_update_theme (GtkSettings *settings) { GtkSettingsPrivate *priv = settings->priv; - GtkCssProvider *provider = NULL; gboolean prefer_dark_theme; gchar *theme_name; @@ -2930,9 +2935,9 @@ settings_update_theme (GtkSettings *settings) theme_name = g_strdup ("Raleigh"); } - provider = gtk_css_provider_get_named (theme_name, prefer_dark_theme ? "dark" : NULL); - - settings_update_provider (priv->screen, &priv->theme_provider, provider); + _gtk_css_provider_load_named (priv->theme_provider, + theme_name, + prefer_dark_theme ? "dark" : NULL); if (theme_name && *theme_name) { |