all repos — tint2 @ 6a1b2f06107086c55729e5df66b1d4c9c8ac6141

fork of the tint2 desktop panel for my custom setup - only minimized windows across all desktops for the taskbar

Icon lookup: allow debugging enabled by env variable
o9000 mrovi9000@gmail.com
commit

6a1b2f06107086c55729e5df66b1d4c9c8ac6141

parent

95d4d90efd1164432ed6f98ea9aa09fcc4c6fa9b

3 files changed, 39 insertions(+), 11 deletions(-)

jump to
M src/init.csrc/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) {
M src/launcher/icon-theme-common.csrc/launcher/icon-theme-common.c

@@ -29,6 +29,8 @@ #include "apps-common.h"

#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 @@ const IconThemeDir *db = (const IconThemeDir *)b;

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 @@ int file_name_size = 4096;

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 @@ (next_larger_size == -1 || ((IconThemeDir *)dir->data)->size < next_larger_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 @@ }

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 @@ }

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 @@ }

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 @@ }

// 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 *extension = (char *)ext->data;

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 @@ }

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; }
M src/launcher/icon-theme-common.hsrc/launcher/icon-theme-common.h

@@ -57,4 +57,6 @@ // Returns a list of the directories used to store icons.

// Do not free the result, it is cached. const GSList *get_icon_locations(); +extern gboolean debug_icons; + #endif