summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2012-09-19 16:41:19 +0200
committerBenjamin Otte <otte@redhat.com>2012-09-19 16:50:31 +0200
commit3f7d11f09cbfde8e4eddfebc4e47fec52c2b492f (patch)
treefe2f7a0024de188a4f54ac36bf181beaaeff6047
parent27e82920ebb59f4bb1b6244db6f32ce8278ad523 (diff)
downloadgtk+-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.c13
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)
{