[gtk+/key-themes] Move key/theme CSS providers to GtkSettingsPrivate
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/key-themes] Move key/theme CSS providers to GtkSettingsPrivate
- Date: Fri, 28 Jan 2011 19:20:29 +0000 (UTC)
commit 20e085140445dba765933d9d9e7b012c2853ba0a
Author: Carlos Garnacho <carlosg gnome org>
Date: Fri Jan 28 20:19:30 2011 +0100
Move key/theme CSS providers to GtkSettingsPrivate
gtk/gtksettings.c | 91 ++++++++++++++++++++++------------------------------
1 files changed, 39 insertions(+), 52 deletions(-)
---
diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c
index 2a9fa49..1961204 100644
--- a/gtk/gtksettings.c
+++ b/gtk/gtksettings.c
@@ -100,6 +100,8 @@ struct _GtkSettingsPrivate
GData *queued_settings; /* of type GtkSettingsValue* */
GtkSettingsPropertyValue *property_values;
GdkScreen *screen;
+ GtkCssProvider *theme_provider;
+ GtkCssProvider *key_theme_provider;
};
typedef enum
@@ -1384,6 +1386,12 @@ gtk_settings_finalize (GObject *object)
g_datalist_clear (&priv->queued_settings);
+ if (priv->theme_provider)
+ g_object_unref (priv->theme_provider);
+
+ if (priv->key_theme_provider)
+ g_object_unref (priv->key_theme_provider);
+
G_OBJECT_CLASS (gtk_settings_parent_class)->finalize (object);
}
@@ -2671,20 +2679,38 @@ settings_update_color_scheme (GtkSettings *settings)
}
static void
-settings_update_theme (GtkSettings *settings)
+settings_update_provider (GdkScreen *screen,
+ GtkCssProvider **old,
+ GtkCssProvider *new)
{
- static GQuark quark_theme_name = 0;
+ if (*old != new)
+ {
+ if (*old)
+ {
+ gtk_style_context_remove_provider_for_screen (screen,
+ GTK_STYLE_PROVIDER (*old));
+ g_object_unref (*old);
+ *old = NULL;
+ }
+ if (new)
+ {
+ gtk_style_context_add_provider_for_screen (screen,
+ GTK_STYLE_PROVIDER (new),
+ GTK_STYLE_PROVIDER_PRIORITY_THEME);
+ *old = g_object_ref (new);
+ }
+ }
+}
+
+static void
+settings_update_theme (GtkSettings *settings)
+{
GtkSettingsPrivate *priv = settings->priv;
- GtkCssProvider *provider, *new_provider = NULL;
+ GtkCssProvider *provider = NULL;
gboolean prefer_dark_theme;
gchar *theme_name;
- if (G_UNLIKELY (!quark_theme_name))
- quark_theme_name = g_quark_from_static_string ("gtk-settings-theme-name");
-
- provider = g_object_get_qdata (G_OBJECT (settings), quark_theme_name);
-
g_object_get (settings,
"gtk-theme-name", &theme_name,
"gtk-application-prefer-dark-theme", &prefer_dark_theme,
@@ -2697,26 +2723,10 @@ settings_update_theme (GtkSettings *settings)
if (prefer_dark_theme)
variant = "dark";
- new_provider = gtk_css_provider_get_named (theme_name, variant);
+ provider = gtk_css_provider_get_named (theme_name, variant);
}
- if (new_provider != provider)
- {
- if (provider)
- gtk_style_context_remove_provider_for_screen (priv->screen,
- GTK_STYLE_PROVIDER (provider));
-
- if (new_provider)
- {
- gtk_style_context_add_provider_for_screen (priv->screen,
- GTK_STYLE_PROVIDER (new_provider),
- GTK_STYLE_PROVIDER_PRIORITY_THEME);
- g_object_ref (new_provider);
- }
-
- g_object_set_qdata_full (G_OBJECT (settings), quark_theme_name,
- new_provider, (GDestroyNotify) g_object_unref);
- }
+ settings_update_provider (priv->screen, &priv->theme_provider, provider);
if (theme_name && *theme_name)
{
@@ -2740,41 +2750,18 @@ settings_update_theme (GtkSettings *settings)
static void
settings_update_key_theme (GtkSettings *settings)
{
- static GQuark quark_key_theme_name = 0;
GtkSettingsPrivate *priv = settings->priv;
- GtkCssProvider *provider, *new_provider = NULL;
+ GtkCssProvider *provider = NULL;
gchar *key_theme_name;
- if (G_UNLIKELY (!quark_key_theme_name))
- quark_key_theme_name = g_quark_from_static_string ("gtk-settings-key-theme-name");
-
- provider = g_object_get_qdata (G_OBJECT (settings), quark_key_theme_name);
-
g_object_get (settings,
"gtk-key-theme-name", &key_theme_name,
NULL);
if (key_theme_name && *key_theme_name)
- new_provider = gtk_css_provider_get_named (key_theme_name, "keys");
-
- if (new_provider != provider)
- {
- if (provider)
- gtk_style_context_remove_provider_for_screen (priv->screen,
- GTK_STYLE_PROVIDER (provider));
-
- if (new_provider)
- {
- gtk_style_context_add_provider_for_screen (priv->screen,
- GTK_STYLE_PROVIDER (new_provider),
- GTK_STYLE_PROVIDER_PRIORITY_THEME);
- g_object_ref (new_provider);
- }
-
- g_object_set_qdata_full (G_OBJECT (settings), quark_key_theme_name,
- new_provider, (GDestroyNotify) g_object_unref);
- }
+ provider = gtk_css_provider_get_named (key_theme_name, "keys");
+ settings_update_provider (priv->screen, &priv->key_theme_provider, provider);
g_free (key_theme_name);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]