StTextureCache: never return fullcolor icons for ST_ICON_SYMBOLIC
g_themed_icon_new_with_default_fallbacks() does not do what we want with symbolic icons; if the user's icon theme is not "gnome", then it will end up preferring a non-symbolic icon from the higher-level theme over a symbolic icon from gnome-icon-theme-symbolic. If the shell requests a symbolic icon, and there is only a non-symbolic icon available, that should be considered a programmer error, just like requesting a non-existent icon name. So change the code to only look up "-symbolic" names when drawing an ST_ICON_SYMBOLIC icon. https://bugzilla.gnome.org/show_bug.cgi?id=644142
This commit is contained in:
parent
8d14df0ced
commit
026fc531ba
@ -1391,6 +1391,36 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
|
|||||||
* icon you are loading, use %ST_ICON_FULLCOLOR.
|
* icon you are loading, use %ST_ICON_FULLCOLOR.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* generates names like g_themed_icon_new_with_default_fallbacks(),
|
||||||
|
* but *only* symbolic names
|
||||||
|
*/
|
||||||
|
static char **
|
||||||
|
symbolic_names_for_icon (const char *name)
|
||||||
|
{
|
||||||
|
char **parts, **names;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
parts = g_strsplit (name, "-", -1);
|
||||||
|
names = g_new (char *, g_strv_length (parts) + 1);
|
||||||
|
for (i = 0; parts[i]; i++)
|
||||||
|
{
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
names[i] = g_strdup_printf ("%s-symbolic", parts[i]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
names[i] = g_strdup_printf ("%.*s-%s-symbolic",
|
||||||
|
(int) (strlen (names[i - 1]) - strlen ("-symbolic")),
|
||||||
|
names[i - 1], parts[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
names[i] = NULL;
|
||||||
|
|
||||||
|
g_strfreev (parts);
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* st_texture_cache_load_icon_name:
|
* st_texture_cache_load_icon_name:
|
||||||
* @cache: The texture cache instance
|
* @cache: The texture cache instance
|
||||||
@ -1414,7 +1444,7 @@ st_texture_cache_load_icon_name (StTextureCache *cache,
|
|||||||
{
|
{
|
||||||
ClutterActor *texture;
|
ClutterActor *texture;
|
||||||
GIcon *themed;
|
GIcon *themed;
|
||||||
char *symbolic;
|
char **names;
|
||||||
|
|
||||||
g_return_val_if_fail (!(icon_type == ST_ICON_SYMBOLIC && theme_node == NULL), NULL);
|
g_return_val_if_fail (!(icon_type == ST_ICON_SYMBOLIC && theme_node == NULL), NULL);
|
||||||
|
|
||||||
@ -1429,9 +1459,9 @@ st_texture_cache_load_icon_name (StTextureCache *cache,
|
|||||||
return CLUTTER_ACTOR (texture);
|
return CLUTTER_ACTOR (texture);
|
||||||
break;
|
break;
|
||||||
case ST_ICON_SYMBOLIC:
|
case ST_ICON_SYMBOLIC:
|
||||||
symbolic = g_strconcat (name, "-symbolic", NULL);
|
names = symbolic_names_for_icon (name);
|
||||||
themed = g_themed_icon_new_with_default_fallbacks ((const gchar*)symbolic);
|
themed = g_themed_icon_new_from_names (names, -1);
|
||||||
g_free (symbolic);
|
g_strfreev (names);
|
||||||
texture = load_gicon_with_colors (cache, themed, size,
|
texture = load_gicon_with_colors (cache, themed, size,
|
||||||
st_theme_node_get_icon_colors (theme_node));
|
st_theme_node_get_icon_colors (theme_node));
|
||||||
g_object_unref (themed);
|
g_object_unref (themed);
|
||||||
|
Loading…
Reference in New Issue
Block a user