[gtk+] GtkCssProvider: Take into account variant
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GtkCssProvider: Take into account variant
- Date: Mon, 31 Jan 2011 02:22:27 +0000 (UTC)
commit b98caf938594504508dfc4546d6f606e6edeab9d
Author: Bastien Nocera <hadess hadess net>
Date: Mon Jan 31 00:30:00 2011 +0000
GtkCssProvider: Take into account variant
When loading a theme, make sure we take into account the variant
so we don't use the plain version when the theme changes.
Also make sure to fallback to the plain theme when loading a variant
fails.
https://bugzilla.gnome.org/show_bug.cgi?id=640983
gtk/gtkcssprovider.c | 31 +++++++++++++++++++++----------
gtk/gtksettings.c | 12 +++++++-----
2 files changed, 28 insertions(+), 15 deletions(-)
---
diff --git a/gtk/gtkcssprovider.c b/gtk/gtkcssprovider.c
index 61972f9..45324fc 100644
--- a/gtk/gtkcssprovider.c
+++ b/gtk/gtkcssprovider.c
@@ -4003,24 +4003,31 @@ _gtk_css_provider_get_theme_dir (void)
/**
* gtk_css_provider_get_named:
* @name: A theme name
- * @variant: variant to load, for example, "dark", or %NULL for the default
+ * @variant: (allow-none): variant to load, for example, "dark", or
+ * %NULL for the default
*
* Loads a theme from the usual theme paths
*
* Returns: (transfer none): a #GtkCssProvider with the theme loaded.
- * This memory is owned by GTK+, and you must not free it.
- **/
+ * This memory is owned by GTK+, and you must not free it.
+ */
GtkCssProvider *
gtk_css_provider_get_named (const gchar *name,
const gchar *variant)
{
static GHashTable *themes = NULL;
GtkCssProvider *provider;
+ gchar *key;
if (G_UNLIKELY (!themes))
themes = g_hash_table_new (g_str_hash, g_str_equal);
- provider = g_hash_table_lookup (themes, name);
+ if (variant == NULL)
+ key = (gchar *)name;
+ else
+ key = g_strconcat (name, "-", variant, NULL);
+
+ provider = g_hash_table_lookup (themes, key);
if (!provider)
{
@@ -4048,7 +4055,9 @@ gtk_css_provider_get_named (const gchar *name,
if (!path)
{
- gchar *theme_dir = _gtk_css_provider_get_theme_dir ();
+ gchar *theme_dir;
+
+ theme_dir = _gtk_css_provider_get_theme_dir ();
path = g_build_filename (theme_dir, name, subpath, NULL);
g_free (theme_dir);
@@ -4063,12 +4072,11 @@ gtk_css_provider_get_named (const gchar *name,
if (path)
{
- GError *error = NULL;
+ GError *error;
provider = gtk_css_provider_new ();
- gtk_css_provider_load_from_path (provider, path, &error);
-
- if (error)
+ error = NULL;
+ if (!gtk_css_provider_load_from_path (provider, path, &error))
{
g_warning ("Could not load named theme \"%s\": %s", name, error->message);
g_error_free (error);
@@ -4077,9 +4085,12 @@ gtk_css_provider_get_named (const gchar *name,
provider = NULL;
}
else
- g_hash_table_insert (themes, g_strdup (name), provider);
+ g_hash_table_insert (themes, g_strdup (key), provider);
}
}
+ if (key != name)
+ g_free (key);
+
return provider;
}
diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c
index 5008f09..ee9c336 100644
--- a/gtk/gtksettings.c
+++ b/gtk/gtksettings.c
@@ -2672,7 +2672,8 @@ settings_update_theme (GtkSettings *settings)
static GQuark quark_theme_name = 0;
GtkSettingsPrivate *priv = settings->priv;
- GtkCssProvider *provider, *new_provider = NULL;
+ GtkCssProvider *provider;
+ GtkCssProvider *new_provider;
gboolean prefer_dark_theme;
gchar *theme_name;
@@ -2686,14 +2687,15 @@ settings_update_theme (GtkSettings *settings)
"gtk-application-prefer-dark-theme", &prefer_dark_theme,
NULL);
+ new_provider = NULL;
+
if (theme_name && *theme_name)
{
- gchar *variant = NULL;
-
if (prefer_dark_theme)
- variant = "dark";
+ new_provider = gtk_css_provider_get_named (theme_name, "dark");
- new_provider = gtk_css_provider_get_named (theme_name, variant);
+ if (!new_provider)
+ new_provider = gtk_css_provider_get_named (theme_name, NULL);
}
if (new_provider != provider)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]