add efreet_util_menus_find()

SVN revision: 29527
This commit is contained in:
rephorm 2007-04-15 06:16:54 +00:00 committed by rephorm
parent b2aac1d94a
commit 354550b349
2 changed files with 48 additions and 0 deletions

View 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);
}

View 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;