From 3dd8ffc2bb1cefd603bcadabd8886dda3192dbd5 Mon Sep 17 00:00:00 2001 From: Mario Sanchez Prada Date: Wed, 10 May 2017 15:59:32 +0100 Subject: [PATCH] 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 --- src/st/st-texture-cache.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/st/st-texture-cache.c b/src/st/st-texture-cache.c index 850c0d697..adffafaba 100644 --- a/src/st/st-texture-cache.c +++ b/src/st/st-texture-cache.c @@ -34,6 +34,8 @@ #define CACHE_PREFIX_FILE "file:" #define CACHE_PREFIX_FILE_FOR_CAIRO "file-for-cairo:" +#define IMAGE_MISSING_ICON_NAME "image-missing" + struct _StTextureCachePrivate { GtkIconTheme *icon_theme; @@ -994,7 +996,15 @@ st_texture_cache_load_gicon (StTextureCache *cache, size, scale, lookup_flags); if (info == NULL) - return 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) + return NULL; + } gicon_string = g_icon_to_string (icon); /* A return value of NULL indicates that the icon can not be serialized,