Enlightenment CVS committal Author : rephorm Project : e17 Module : libs/efreet
Dir : e17/libs/efreet/src/lib Modified Files: efreet_utils.c efreet_utils.h Log Message: leak-- add functions to retrieve a list of desktop categories and a list of desktops in a given category =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.c,v retrieving revision 1.34 retrieving revision 1.35 diff -u -3 -r1.34 -r1.35 --- efreet_utils.c 15 Apr 2007 06:16:54 -0000 1.34 +++ efreet_utils.c 15 Apr 2007 07:24:03 -0000 1.35 @@ -66,6 +66,8 @@ static void efreet_util_cache_search_comment_glob(void *value, void *data); static int efreet_util_glob_match(const char *str, const char *glob); +static void efreet_util_cache_search_categories(void *value, void *data); +static void efreet_util_cache_search_category(void *value, void *data); static void efreet_util_monitor(const char *path, const char *file_id, int priority); static void efreet_util_monitor_cb(void *data, Ecore_File_Monitor *monitor, @@ -404,6 +406,46 @@ return search.list; } +/** + * Find all desktop categories + * + * @return an Ecore_List of category names (const char *) + */ +Ecore_List * +efreet_util_desktop_categories_list() +{ + Efreet_Cache_Search_List search; + // XXX this list could be build as the cache is filled. for now we run through the cache each time this is called + + search.list = ecore_list_new(); + ecore_list_set_free_cb(search.list, ECORE_FREE_CB(ecore_string_release)); + ecore_hash_for_each_node(desktop_by_file_id, efreet_util_cache_search_categories, &search); + + if (ecore_list_is_empty(search.list)) IF_FREE_LIST(search.list); + return search.list; +} + +/** + * Find all desktops in a given category + * @param category the category name + * @return a list of desktops + */ +Ecore_List * +efreet_util_desktop_category_list(const char *category) +{ + Efreet_Cache_Search_List search; + + search.list = ecore_list_new(); + search.what = ecore_string_instance(category); + + ecore_hash_for_each_node(desktop_by_file_id, efreet_util_cache_search_category, &search); + ecore_string_release(search.what); + + if (ecore_list_is_empty(search.list)) IF_FREE_LIST(search.list); + return search.list; + +} + #if 0 static void dump(void *value, void *data __UNUSED__) @@ -455,6 +497,7 @@ if (!fill->files) { /* Couldn't open this dir, continue to next */ + efreet_util_cache_dir_free(fill->current); fill->current = NULL; } else @@ -813,6 +856,48 @@ if (!strcmp(glob, "*")) return 1; if (!fnmatch(glob, str, 0)) return 1; return 0; +} + +static void +efreet_util_cache_search_categories(void *value, void *data) +{ + Ecore_Hash_Node *node; + Efreet_Cache_Search_List *search; + Efreet_Util_Desktop *ud; + const char *category; + + node = value; + search = data; + ud = node->value; + + if (!ud->desktop->categories) return; + ecore_list_goto_first(ud->desktop->categories); + while ((category = ecore_list_next(ud->desktop->categories))) + { + if (!ecore_list_goto(search->list, category)) + ecore_list_append(search->list, (void *)ecore_string_instance(category)); + } +} + +static void +efreet_util_cache_search_category(void *value, void *data) +{ + Ecore_Hash_Node *node; + Efreet_Cache_Search_List *search; + Efreet_Util_Desktop *ud; + const char *category; + + node = value; + search = data; + ud = node->value; + + if (!ud->desktop->categories) return; + ecore_list_goto_first(ud->desktop->categories); + while ((category = ecore_list_next(ud->desktop->categories))) + { + if (category == search->what) + ecore_list_append(search->list, ud->desktop); + } } static void =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.h,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- efreet_utils.h 15 Apr 2007 06:16:54 -0000 1.19 +++ efreet_utils.h 15 Apr 2007 07:24:03 -0000 1.20 @@ -38,6 +38,9 @@ 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_categories_list(); +Ecore_List *efreet_util_desktop_category_list(const char *category); + Ecore_List *efreet_util_menus_find(); extern int EFREET_EVENT_DESKTOP_LIST_CHANGE; extern int EFREET_EVENT_DESKTOP_CHANGE; ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ enlightenment-cvs mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs