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

Reply via email to