]> Dogcows Code - chaz/tint2/commitdiff
launcher_apps_dir-v2.patch
authorMishael A Sibiryakov <mishael.sb.fallback@gmail.com>
Wed, 27 Mar 2013 17:32:47 +0000 (11:32 -0600)
committerCharles McGarvey <chazmcgarvey@brokenzipper.com>
Wed, 27 Mar 2013 17:35:18 +0000 (11:35 -0600)
http://code.google.com/p/tint2/issues/detail?id=381

src/config.c
src/util/common.c
src/util/common.h

index e38e087475e5091ea4223721fcfb50a94f8a1793..b612052e6257fc31712a0a486f77cf1fdc0dcdcd 100644 (file)
@@ -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)
index f6fa36e32c2c0f8cbbfaeda9f339809c4db1f880..224c4ea6a3d7357738f0de9929679f3cea77dc89 100644 (file)
 #include <X11/Xutil.h>
 #include <X11/Xatom.h>
 #include <X11/extensions/Xrender.h>
+#include <sys/types.h>
+#include <sys/stat.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <fnmatch.h>
 
 #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;
+}
index 0c60317a54d49a1cbe23f55d7e93360549c6a675..b97e3f12f404eed36bb454a9657af33f3d07eff4 100644 (file)
@@ -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
 
This page took 0.026945 seconds and 4 git commands to generate.