[gtk+] Move key/theme CSS providers to GtkSettingsPrivate
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Move key/theme CSS providers to GtkSettingsPrivate
- Date: Mon, 31 Jan 2011 04:37:40 +0000 (UTC)
commit c0b80530890663631f653e81e8e013e67f776b2e
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 | 98 ++++++++++++++++++++++-------------------------------
1 files changed, 41 insertions(+), 57 deletions(-)
---
diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c
index 221629e..839509a 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);
}
@@ -2672,54 +2680,53 @@ 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;
- GtkCssProvider *new_provider;
+ 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,
NULL);
- new_provider = NULL;
-
if (theme_name && *theme_name)
{
if (prefer_dark_theme)
- new_provider = gtk_css_provider_get_named (theme_name, "dark");
+ provider = gtk_css_provider_get_named (theme_name, "dark");
- if (!new_provider)
- new_provider = gtk_css_provider_get_named (theme_name, NULL);
+ if (!provider)
+ provider = gtk_css_provider_get_named (theme_name, NULL);
}
- 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)
{
@@ -2743,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]