From 607e5d4b9bf3c93790fceebfcc14efd694506905 Mon Sep 17 00:00:00 2001 From: Joerg Sonnenberger Date: Sun, 15 Aug 2010 03:01:55 +0000 Subject: [PATCH] From: Joerg Sonnenberger Subject: [E-devel] [PATCH] efreet and icon loading Hi all, attached patch fixes two issues: (1) If using a non-default prefix, share/pixmaps should be checked before the hard-coded /usr/share/pixmaps fallback. This basically restores symmetry with the other cases like share/icons. (2) Do a fallback lookup if the theme is not valid or faked. This can happen if only hicolor is installed and e17 decides to use Tango. Before, e.g. gimp's icon wasn't picked up because the short cut was too early. SVN revision: 51124 --- legacy/efreet/src/lib/efreet_icon.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/legacy/efreet/src/lib/efreet_icon.c b/legacy/efreet/src/lib/efreet_icon.c index 60d7fec465..a952c56e03 100644 --- a/legacy/efreet/src/lib/efreet_icon.c +++ b/legacy/efreet/src/lib/efreet_icon.c @@ -531,14 +531,16 @@ efreet_icon_find_helper(Efreet_Icon_Theme *theme, efreet_icon_theme_cache_check(theme); - /* go no further if this theme is fake */ - if (theme->fake || !theme->valid) return NULL; /* limit recursion in finding themes and inherited themes to 256 levels */ if (recurse > 256) return NULL; recurse++; - value = efreet_icon_lookup_icon(theme, icon, size); + /* go no further if this theme is fake */ + if (theme->fake || !theme->valid) + value = NULL; + else + value = efreet_icon_lookup_icon(theme, icon, size); /* we didin't find the image check the inherited themes */ if (!value || (value == NON_EXISTING)) @@ -843,6 +845,17 @@ efreet_icon_fallback_icon(const char *icon_name) } } + EINA_LIST_FOREACH(xdg_dirs, l, dir) + { + snprintf(path, PATH_MAX, "%s/pixmaps", dir); + icon = efreet_icon_fallback_dir_scan(path, icon_name); + if (icon) + { + efreet_icon_cache_add(efreet_icon_find_theme_check(NULL), icon_name, 0, icon); + return icon; + } + } + icon = efreet_icon_fallback_dir_scan("/usr/share/pixmaps", icon_name); } @@ -1263,6 +1276,12 @@ efreet_icon_theme_dir_scan_all(const char *theme_name) efreet_icon_theme_dir_scan(path, theme_name); } + EINA_LIST_FOREACH(xdg_dirs, l, dir) + { + snprintf(path, sizeof(path), "%s/pixmaps", dir); + efreet_icon_theme_dir_scan(path, theme_name); + } + efreet_icon_theme_dir_scan("/usr/share/pixmaps", theme_name); }