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.
This commit is contained in:
Matthias Clasen 2006-01-11 06:20:17 +00:00 committed by Matthias Clasen
parent a469257a23
commit f35d4e1e47
5 changed files with 65 additions and 4 deletions

View File

@ -1,3 +1,15 @@
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.
2006-01-10 Matthias Clasen <mclasen@redhat.com>
* tests/testgtk.c: Add an expander example.

View File

@ -1,3 +1,15 @@
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.
2006-01-10 Matthias Clasen <mclasen@redhat.com>
* tests/testgtk.c: Add an expander example.

View File

@ -2802,6 +2802,7 @@ static const char settings_names[] =
"Net/CursorBlinkTime\0" "gtk-cursor-blink-time\0"
"Net/ThemeName\0" "gtk-theme-name\0"
"Net/IconThemeName\0" "gtk-icon-theme-name\0"
"Net/FallbackIconTheme\0" "gtk-fallback-icon-theme\0"
"Gtk/CanChangeAccels\0" "gtk-can-change-accels\0"
"Gtk/ColorPalette\0" "gtk-color-palette\0"
"Gtk/FontName\0" "gtk-font-name\0"

View File

@ -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);

View File

@ -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",