GtkIconTheme: Repair symbolic fallback with rtl/ltr

For symbolic icons, we prefer symbolics in inherited themes over
generic icons in the theme itself. So far this was implemented
by looking at icon_name[0] and looking that up in inherited themes
if it is symbolic. But with automatic rtl/ltr handling, the first
icon  name will always have an -rtl or -ltr suffix, and an icon
with that suffix is not going to exist in most cases. To fix this,
look for shorter icon names too, as long as they are still symbolic.

https://bugzilla.gnome.org/show_bug.cgi?id=737000
This commit is contained in:
Matthias Clasen 2014-09-21 14:46:09 -04:00
parent 1b858e4212
commit 964c202c38

View File

@ -1698,18 +1698,20 @@ real_choose_icon (GtkIconTheme *icon_theme,
for (i = 0; icon_names[i]; i++) for (i = 0; icon_names[i]; i++)
g_print ("\tlookup name: %s\n", icon_names[i])); g_print ("\tlookup name: %s\n", icon_names[i]));
/* for symbolic icons, do a search in all registered themes first; /* For symbolic icons, do a search in all registered themes first;
* a theme that inherits them from a parent theme might provide * a theme that inherits them from a parent theme might provide
* an alternative full-color version, but still expect the symbolic icon * an alternative full-color version, but still expect the symbolic icon
* to show up instead. * to show up instead.
*
* In other words: We prefer symbolic icons in inherited themes over
* generic icons in the theme.
*/ */
if (icon_names[0] &&
icon_name_is_symbolic (icon_names[0]))
{
for (l = priv->themes; l; l = l->next) for (l = priv->themes; l; l = l->next)
{ {
theme = l->data; theme = l->data;
icon_name = icon_names[0]; for (i = 0; icon_names[i] && icon_name_is_symbolic (icon_names[i]); i++)
{
icon_name = icon_names[i];
icon_info = theme_lookup_icon (theme, icon_name, size, scale, allow_svg, use_builtin); icon_info = theme_lookup_icon (theme, icon_name, size, scale, allow_svg, use_builtin);
if (icon_info) if (icon_info)
goto out; goto out;