From 6a1b2f06107086c55729e5df66b1d4c9c8ac6141 Mon Sep 17 00:00:00 2001 From: o9000 Date: Fri, 1 Sep 2017 11:34:28 +0200 Subject: [PATCH] Icon lookup: allow debugging enabled by env variable --- src/init.c | 1 + src/launcher/icon-theme-common.c | 47 ++++++++++++++++++++++++-------- src/launcher/icon-theme-common.h | 2 ++ 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/init.c b/src/init.c index 6176b6a..bfb55e6 100644 --- a/src/init.c +++ b/src/init.c @@ -82,6 +82,7 @@ void handle_env_vars() { debug_geometry = getenv("DEBUG_GEOMETRY") != NULL; debug_gradients = getenv("DEBUG_GRADIENTS") != NULL; + debug_icons = getenv("DEBUG_ICONS") != NULL; debug_fps = getenv("DEBUG_FPS") != NULL; debug_frames = getenv("DEBUG_FRAMES") != NULL; if (debug_fps) { diff --git a/src/launcher/icon-theme-common.c b/src/launcher/icon-theme-common.c index 5a0ffc6..03a9a24 100644 --- a/src/launcher/icon-theme-common.c +++ b/src/launcher/icon-theme-common.c @@ -29,6 +29,8 @@ #include "common.h" #include "cache.h" +gboolean debug_icons = FALSE; + #define ICON_DIR_TYPE_SCALABLE 0 #define ICON_DIR_TYPE_FIXED 1 #define ICON_DIR_TYPE_THRESHOLD 2 @@ -533,7 +535,6 @@ gint compare_theme_directories(gconstpointer a, gconstpointer b, gpointer size_q return abs(da->size - size) - abs(db->size - size); } -#define DEBUG_ICON_SEARCH 0 char *get_icon_path_helper(GSList *themes, const char *icon_name, int size) { if (icon_name == NULL) @@ -585,6 +586,8 @@ char *get_icon_path_helper(GSList *themes, const char *icon_name, int size) char *file_name = calloc(file_name_size, 1); for (theme = themes; theme; theme = g_slist_next(theme)) { + if (debug_icons) + fprintf(stderr, "Searching theme: %s\n", ((IconTheme *)theme->data)->name); ((IconTheme *)theme->data)->list_directories = g_slist_sort_with_data(((IconTheme *)theme->data)->list_directories, compare_theme_directories, @@ -600,6 +603,8 @@ char *get_icon_path_helper(GSList *themes, const char *icon_name, int size) (!next_larger_theme ? 1 : theme == next_larger_theme)); if (!possible) continue; + if (debug_icons) + fprintf(stderr, "Searching directory: %s\n", ((IconThemeDir *)dir->data)->name); const GSList *base; for (base = basenames; base; base = g_slist_next(base)) { for (GSList *ext = extensions; ext; ext = g_slist_next(ext)) { @@ -617,11 +622,11 @@ char *get_icon_path_helper(GSList *themes, const char *icon_name, int size) file_name[0] = 0; // filename = directory/$(themename)/subdirectory/iconname.extension sprintf(file_name, "%s/%s/%s/%s%s", base_name, theme_name, dir_name, icon_name, extension); - if (DEBUG_ICON_SEARCH) - printf("checking %s\n", file_name); + if (debug_icons) + printf("Checking %s\n", file_name); if (g_file_test(file_name, G_FILE_TEST_EXISTS)) { - if (DEBUG_ICON_SEARCH) - printf("found: %s\n", file_name); + if (debug_icons) + printf("Found potential match: %s\n", file_name); // Closest match if (directory_size_distance((IconThemeDir *)dir->data, size) < minimal_size && (!best_file_theme ? 1 : theme == best_file_theme)) { @@ -632,7 +637,7 @@ char *get_icon_path_helper(GSList *themes, const char *icon_name, int size) best_file_name = strdup(file_name); minimal_size = directory_size_distance((IconThemeDir *)dir->data, size); best_file_theme = theme; - if (DEBUG_ICON_SEARCH) + if (debug_icons) printf("best_file_name = %s; minimal_size = %d\n", best_file_name, minimal_size); } // Next larger match @@ -646,7 +651,7 @@ char *get_icon_path_helper(GSList *themes, const char *icon_name, int size) next_larger = strdup(file_name); next_larger_size = ((IconThemeDir *)dir->data)->size; next_larger_theme = theme; - if (DEBUG_ICON_SEARCH) + if (debug_icons) printf("next_larger = %s; next_larger_size = %d\n", next_larger, next_larger_size); } } @@ -668,6 +673,8 @@ char *get_icon_path_helper(GSList *themes, const char *icon_name, int size) // Look in unthemed icons { + if (debug_icons) + fprintf(stderr, "Searching unthemed icons\n"); for (const GSList *base = basenames; base; base = g_slist_next(base)) { for (GSList *ext = extensions; ext; ext = g_slist_next(ext)) { char *base_name = (char *)base->data; @@ -675,9 +682,11 @@ char *get_icon_path_helper(GSList *themes, const char *icon_name, int size) file_name = calloc(strlen(base_name) + strlen(icon_name) + strlen(extension) + 100, 1); // filename = directory/iconname.extension sprintf(file_name, "%s/%s%s", base_name, icon_name, extension); - if (DEBUG_ICON_SEARCH) - printf("checking %s\n", file_name); + if (debug_icons) + printf("Checking %s\n", file_name); if (g_file_test(file_name, G_FILE_TEST_EXISTS)) { + if (debug_icons) + printf("Found %s\n", file_name); g_slist_free(extensions); return file_name; } else { @@ -742,21 +751,37 @@ void add_icon_path_to_cache(IconThemeWrapper *wrapper, const char *icon_name, in char *get_icon_path(IconThemeWrapper *wrapper, const char *icon_name, int size, gboolean use_fallbacks) { - if (!wrapper) + if (debug_icons) + fprintf(stderr, + "Searching for icon %s with size %d, fallbacks %sallowed\n", + icon_name, + size, + use_fallbacks ? "" : "not "); + if (!wrapper) { + if (debug_icons) + fprintf(stderr, + "Icon search aborted, themes not loaded\n"); return NULL; + } if (!icon_name || strlen(icon_name) == 0) goto notfound; char *path = get_icon_path_from_cache(wrapper, icon_name, size); - if (path) + if (path) { + if (debug_icons) + fprintf(stderr, + "Icon found in cache: %s\n", path); return path; + } load_default_theme(wrapper); icon_name = icon_name ? icon_name : DEFAULT_ICON; path = get_icon_path_helper(wrapper->themes, icon_name, size); if (path) { + if (debug_icons) + fprintf(stderr, "Icon found: %s\n", path); add_icon_path_to_cache(wrapper, icon_name, size, path); return path; } diff --git a/src/launcher/icon-theme-common.h b/src/launcher/icon-theme-common.h index 53dccd6..6dbe059 100644 --- a/src/launcher/icon-theme-common.h +++ b/src/launcher/icon-theme-common.h @@ -57,4 +57,6 @@ char *get_icon_path(IconThemeWrapper *wrapper, const char *icon_name, int size, // Do not free the result, it is cached. const GSList *get_icon_locations(); +extern gboolean debug_icons; + #endif