diff options
author | Benjamin Otte <otte@redhat.com> | 2012-09-19 16:41:19 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2012-09-19 16:50:31 +0200 |
commit | 3f7d11f09cbfde8e4eddfebc4e47fec52c2b492f (patch) | |
tree | fe2f7a0024de188a4f54ac36bf181beaaeff6047 | |
parent | 27e82920ebb59f4bb1b6244db6f32ce8278ad523 (diff) | |
download | gtk+-3f7d11f09cbfde8e4eddfebc4e47fec52c2b492f.tar.gz |
settings: Use _gtk_css_provider_load_named()wip/683896
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) { |