add efreet_util_menus_find()
authorrephorm <rephorm>
Sun, 15 Apr 2007 06:16:54 +0000 (06:16 +0000)
committerrephorm <rephorm@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sun, 15 Apr 2007 06:16:54 +0000 (06:16 +0000)
SVN revision: 29527

legacy/efreet/src/lib/efreet_utils.c
legacy/efreet/src/lib/efreet_utils.h

index db4db1c..770b3e6 100644 (file)
@@ -71,6 +71,7 @@ static void efreet_util_monitor(const char *path, const char *file_id, int prior
 static void efreet_util_monitor_cb(void *data, Ecore_File_Monitor *monitor,
                                     Ecore_File_Event event, const char *path);
 static void efreet_util_monitor_free(void *data);
+static void efreet_util_menus_find_helper(Ecore_List *menus, const char *config_dir);
 
 static Ecore_Hash *desktop_by_file_id = NULL;
 static Ecore_Hash *file_id_by_desktop_path = NULL;
@@ -895,3 +896,49 @@ efreet_util_monitor_free(void *data)
     free(em);
 }
 
+/**
+ * Returns a list of .menu files found in the various config dirs.
+ * @return An ecore list of menu file paths (const char *). This must be freed with ecore_list_destroy().
+ */
+Ecore_List *
+efreet_util_menus_find()
+{
+    Ecore_List *menus, *dirs;
+    const char *dir;
+
+    menus = ecore_list_new();
+    ecore_list_set_free_cb(menus, ECORE_FREE_CB(free));
+
+    efreet_util_menus_find_helper(menus, efreet_config_home_get());
+
+    dirs = efreet_config_dirs_get();
+    ecore_list_goto_first(dirs);
+    while ((dir = ecore_list_next(dirs)))
+        efreet_util_menus_find_helper(menus, dir);
+
+    return menus;
+}
+
+static void
+efreet_util_menus_find_helper(Ecore_List *menus, const char *config_dir)
+{
+    DIR *files = NULL;
+    struct dirent *file = NULL;
+    char dbuf[PATH_MAX], fbuf[PATH_MAX];
+
+    snprintf(dbuf, sizeof(dbuf), "%s/menus", config_dir);
+    files = opendir(dbuf);
+    if (!files) return;
+    while ((file = readdir(files))) {
+        const char *exten;
+        exten = strrchr(file->d_name, '.');
+        if (!exten) continue;
+        if (strcmp(".menu", exten)) continue;
+
+        snprintf(fbuf, PATH_MAX, "%s/%s", dbuf, file->d_name);
+        if (ecore_file_is_dir(fbuf)) continue;
+
+        ecore_list_append(menus, strdup(fbuf));
+    }
+    closedir(files);
+}
index fe1a988..d1944ae 100644 (file)
@@ -38,6 +38,7 @@ Ecore_List     *efreet_util_desktop_exec_glob_list(const char *glob);
 Ecore_List     *efreet_util_desktop_generic_name_glob_list(const char *glob);
 Ecore_List     *efreet_util_desktop_comment_glob_list(const char *glob);
 
+Ecore_List *efreet_util_menus_find();
 extern int EFREET_EVENT_DESKTOP_LIST_CHANGE;
 extern int EFREET_EVENT_DESKTOP_CHANGE;