texture-cache: Use image-missing image when no other icon was loaded
If a given icon is not available for neither the current theme nor any of the fallback options (default theme -"Adwaita", "gnome"...), the call to gtk_icon_theme_lookup_by_gicon() will return a NULL value, which returned by the Shell Toolkit as is, causing trouble in the Shell's JS code when calling shell_app_create_icon_texture() to create an icon. To at least mitigate the chances of this having this issue happening, we should at least try to load the standad 'image-missing' icon from the Icon Naming Specification spec when we receive a NULL here, so that at least we try to show something to the user, even if it's ugly. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/1121
This commit is contained in:
parent
541847d8b6
commit
3dd8ffc2bb
@ -34,6 +34,8 @@
|
|||||||
#define CACHE_PREFIX_FILE "file:"
|
#define CACHE_PREFIX_FILE "file:"
|
||||||
#define CACHE_PREFIX_FILE_FOR_CAIRO "file-for-cairo:"
|
#define CACHE_PREFIX_FILE_FOR_CAIRO "file-for-cairo:"
|
||||||
|
|
||||||
|
#define IMAGE_MISSING_ICON_NAME "image-missing"
|
||||||
|
|
||||||
struct _StTextureCachePrivate
|
struct _StTextureCachePrivate
|
||||||
{
|
{
|
||||||
GtkIconTheme *icon_theme;
|
GtkIconTheme *icon_theme;
|
||||||
@ -993,8 +995,16 @@ st_texture_cache_load_gicon (StTextureCache *cache,
|
|||||||
info = gtk_icon_theme_lookup_by_gicon_for_scale (theme, icon,
|
info = gtk_icon_theme_lookup_by_gicon_for_scale (theme, icon,
|
||||||
size, scale,
|
size, scale,
|
||||||
lookup_flags);
|
lookup_flags);
|
||||||
|
if (info == NULL)
|
||||||
|
{
|
||||||
|
/* Do not give up without even trying to pick the image-missing fallback icon. */
|
||||||
|
info = gtk_icon_theme_lookup_icon_for_scale (theme,
|
||||||
|
IMAGE_MISSING_ICON_NAME,
|
||||||
|
size, scale,
|
||||||
|
GTK_ICON_LOOKUP_USE_BUILTIN);
|
||||||
if (info == NULL)
|
if (info == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
gicon_string = g_icon_to_string (icon);
|
gicon_string = g_icon_to_string (icon);
|
||||||
/* A return value of NULL indicates that the icon can not be serialized,
|
/* A return value of NULL indicates that the icon can not be serialized,
|
||||||
|
Loading…
Reference in New Issue
Block a user