diff options
author | Matthias Clasen <mclasen@redhat.com> | 2006-01-11 06:20:17 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2006-01-11 06:20:17 +0000 |
commit | f35d4e1e47a23902045db45c5fcb5b71a71dab41 (patch) | |
tree | 22fe2ffd72dbc2b5117b485a5258911aa5c74239 /gtk | |
parent | a469257a23748e84b0049d8388894e7948347164 (diff) | |
download | gtk+-f35d4e1e47a23902045db45c5fcb5b71a71dab41.tar.gz |
Allow falling back to another icon theme before hicolor. (#325546, Rodney
2006-01-11 Matthias Clasen <mclasen@redhat.com>
Allow falling back to another icon theme before
hicolor. (#325546, Rodney Dawes)
* gtk/gtksettings.c: Add a gtk-fallback-icon-theme setting.
* gdk/x11/gdkevents-x11.c: Map it to the XSetting Net/FallbackIconTheme.
* gtk/gtkicontheme.c: Consult the fallback icon theme before
looking in hicolor.
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkicontheme.c | 33 | ||||
-rw-r--r-- | gtk/gtksettings.c | 11 |
2 files changed, 40 insertions, 4 deletions
diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c index 885df5381a..869cc2c701 100644 --- a/gtk/gtkicontheme.c +++ b/gtk/gtkicontheme.c @@ -72,6 +72,7 @@ struct _GtkIconThemePrivate guint pixbuf_supports_svg : 1; char *current_theme; + char *fallback_theme; char **search_path; int search_path_len; @@ -412,11 +413,15 @@ update_current_theme (GtkIconTheme *icon_theme) if (!priv->custom_theme) { gchar *theme = NULL; + gchar *fallback_theme = NULL; + gboolean changed = FALSE; if (priv->screen) { GtkSettings *settings = gtk_settings_get_for_screen (priv->screen); - g_object_get (settings, "gtk-icon-theme-name", &theme, NULL); + g_object_get (settings, + "gtk-icon-theme-name", &theme, + "gtk-fallback-icon-theme", &fallback_theme, NULL); } if (!theme) @@ -427,10 +432,26 @@ update_current_theme (GtkIconTheme *icon_theme) g_free (priv->current_theme); priv->current_theme = theme; - do_theme_change (icon_theme); + changed = TRUE; } else g_free (theme); + + if ((priv->fallback_theme && !fallback_theme) || + (!priv->fallback_theme && fallback_theme) || + (priv->fallback_theme && fallback_theme && + strcmp (priv->fallback_theme, fallback_theme) != 0)) + { + g_free (priv->fallback_theme); + priv->fallback_theme = fallback_theme; + + changed = TRUE; + } + else + g_free (fallback_theme); + + if (changed) + do_theme_change (icon_theme); } } @@ -504,6 +525,8 @@ gtk_icon_theme_set_screen (GtkIconTheme *icon_theme, G_CALLBACK (display_closed), icon_theme); g_signal_connect (settings, "notify::gtk-icon-theme-name", G_CALLBACK (theme_changed), icon_theme); + g_signal_connect (settings, "notify::gtk-fallback-icon-theme-name", + G_CALLBACK (theme_changed), icon_theme); } update_current_theme (icon_theme); @@ -1019,8 +1042,10 @@ load_themes (GtkIconTheme *icon_theme) priv->all_icons = g_hash_table_new (g_str_hash, g_str_equal); insert_theme (icon_theme, priv->current_theme); - - /* Always look in the "default" icon theme */ + + /* Always look in the "default" icon theme, and in a fallback theme */ + if (priv->fallback_theme) + insert_theme (icon_theme, priv->fallback_theme); insert_theme (icon_theme, DEFAULT_THEME_NAME); priv->themes = g_list_reverse (priv->themes); diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c index a0a10ef75a..9f0c837f7d 100644 --- a/gtk/gtksettings.c +++ b/gtk/gtksettings.c @@ -66,6 +66,7 @@ enum { PROP_SPLIT_CURSOR, PROP_THEME_NAME, PROP_ICON_THEME_NAME, + PROP_FALLBACK_ICON_THEME, PROP_KEY_THEME_NAME, PROP_MENU_BAR_ACCEL, PROP_DND_DRAG_THRESHOLD, @@ -259,6 +260,7 @@ gtk_settings_class_init (GtkSettingsClass *class) GTK_PARAM_READWRITE), NULL); g_assert (result == PROP_THEME_NAME); + result = settings_install_property_parser (class, g_param_spec_string ("gtk-icon-theme-name", P_("Icon Theme Name"), @@ -267,6 +269,15 @@ gtk_settings_class_init (GtkSettingsClass *class) GTK_PARAM_READWRITE), NULL); g_assert (result == PROP_ICON_THEME_NAME); + + result = settings_install_property_parser (class, + g_param_spec_string ("gtk-fallback-icon-theme", + P_("Fallback Icon Theme Name"), + P_("Name of a icon theme to fall back to"), + NULL, + GTK_PARAM_READWRITE), + NULL); + g_assert (result == PROP_FALLBACK_ICON_THEME); result = settings_install_property_parser (class, g_param_spec_string ("gtk-key-theme-name", |