From 9f7b8f30f440c4ba7d9894458fa92dfa4344db03 Mon Sep 17 00:00:00 2001 From: Mishael A Sibiryakov Date: Wed, 27 Mar 2013 11:32:47 -0600 Subject: [PATCH] launcher_apps_dir-v2.patch http://code.google.com/p/tint2/issues/detail?id=381 --- src/config.c | 12 ++++++++++++ src/util/common.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/util/common.h | 2 ++ 3 files changed, 60 insertions(+) diff --git a/src/config.c b/src/config.c index e38e087..b612052 100644 --- a/src/config.c +++ b/src/config.c @@ -591,6 +591,18 @@ void add_entry (char *key, char *value) char *app = strdup(value); panel_config.launcher.list_apps = g_slist_append(panel_config.launcher.list_apps, app); } + else if (strcmp(key, "launcher_apps_dir") == 0) { + + GList *list = dir_scan_alpha(value, "*.desktop"); + + for (list = g_list_first(list); list; list = g_list_next(list)) { + fprintf(stderr, "Add launcher app: %s\n", (const char *)list->data); + panel_config.launcher.list_apps = g_slist_append(panel_config.launcher.list_apps, (char *)strdup((const char *)list->data)); + } + + // Cleanup + g_list_free_full(list, g_free); + } else if (strcmp(key, "launcher_icon_theme") == 0) { // if XSETTINGS manager running, tint2 use it. if (!icon_theme_name) diff --git a/src/util/common.c b/src/util/common.c index f6fa36e..224c4ea 100644 --- a/src/util/common.c +++ b/src/util/common.c @@ -22,10 +22,13 @@ #include #include #include +#include +#include #include #include #include #include +#include #include "common.h" #include "../server.h" @@ -342,3 +345,46 @@ void render_image(Drawable d, int x, int y, int w, int h) XRenderFreePicture(server.dsp, pict_image); XRenderFreePicture(server.dsp, pict_drawable); } + +/** + * @brief + * Scan given directory for files which are meet the given mask and sort them alphabetically + * + * @param path - directory path + * @param mask - filename mask + * + * @return files list + */ +GList *dir_scan_alpha(const char *path, const char *mask) +{ + GError *err = NULL; + GList *list = NULL; + const char *n; + gchar *fn; + struct stat st; + + GDir *dir = g_dir_open(path, 0, &err); + + if (!dir) { + fprintf(stderr, "%s\n", err->message); + g_error_free(err); + } else { + // Enumerate files + while ((n = g_dir_read_name(dir))) { + if (!fnmatch(mask, n, FNM_PATHNAME)) { + fn = g_build_filename(path, n, NULL); + + if (stat((char *)fn, &st) < 0) + continue; + + // Only regular files + if (S_ISREG(st.st_mode)) + list = g_list_prepend(list, (gpointer)fn); + } + } + + list = g_list_sort (list, (GCompareFunc) &strcmp); + } + + return list; +} diff --git a/src/util/common.h b/src/util/common.h index 0c60317..b97e3f1 100644 --- a/src/util/common.h +++ b/src/util/common.h @@ -57,5 +57,7 @@ void adjust_asb(DATA32 *data, int w, int h, int alpha, float satur, float bright void createHeuristicMask(DATA32* data, int w, int h); void render_image(Drawable d, int x, int y, int w, int h); + +GList *dir_scan_alpha(const char *path, const char *mask); #endif -- 2.45.2