forked from enlightenment/efl
parent
b2aac1d94a
commit
354550b349
|
@ -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,
|
static void efreet_util_monitor_cb(void *data, Ecore_File_Monitor *monitor,
|
||||||
Ecore_File_Event event, const char *path);
|
Ecore_File_Event event, const char *path);
|
||||||
static void efreet_util_monitor_free(void *data);
|
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 *desktop_by_file_id = NULL;
|
||||||
static Ecore_Hash *file_id_by_desktop_path = NULL;
|
static Ecore_Hash *file_id_by_desktop_path = NULL;
|
||||||
|
@ -895,3 +896,49 @@ efreet_util_monitor_free(void *data)
|
||||||
free(em);
|
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);
|
||||||
|
}
|
||||||
|
|
|
@ -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_generic_name_glob_list(const char *glob);
|
||||||
Ecore_List *efreet_util_desktop_comment_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_LIST_CHANGE;
|
||||||
extern int EFREET_EVENT_DESKTOP_CHANGE;
|
extern int EFREET_EVENT_DESKTOP_CHANGE;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue