Enlightenment CVS committal

Author  : onefang
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore_desktop


Modified Files:
        Ecore_Desktop.h ecore_desktop_menu.c ecore_desktop_private.h 


Log Message:
*Refactor away all the icky internal ecore_desktop_menu details.
*No need to export global paths anymore.

===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/Ecore_Desktop.h,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -3 -r1.19 -r1.20
--- Ecore_Desktop.h     4 Sep 2006 15:20:27 -0000       1.19
+++ Ecore_Desktop.h     5 Sep 2006 16:32:33 -0000       1.20
@@ -28,14 +28,6 @@
  * For menu file details, see @ref Ecore_Desktop_Menu_Group.
  */
 
-extern Ecore_List         *ecore_desktop_paths_config;
-extern Ecore_List         *ecore_desktop_paths_menus;
-extern Ecore_List         *ecore_desktop_paths_directories;
-extern Ecore_List         *ecore_desktop_paths_desktops;
-extern Ecore_List         *ecore_desktop_paths_icons;
-extern Ecore_List         *ecore_desktop_paths_kde_legacy;
-extern Ecore_List         *ecore_desktop_paths_xsessions;
-
 struct _Ecore_Desktop
 {
    Ecore_Hash         *data, *group, *Categories, *OnlyShowIn, *NotShowIn;
@@ -155,6 +147,7 @@
    void                
ecore_desktop_icon_theme_destroy(Ecore_Desktop_Icon_Theme *icon_theme);
 
 
+   EAPI void           ecore_desktop_menu_for_each(void (*func)(char *name, 
char *path, Ecore_Hash *apps));
    Ecore_Desktop_Tree *ecore_desktop_menu_get(char *file);
 
 
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/ecore_desktop_menu.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- ecore_desktop_menu.c        5 Sep 2006 10:09:11 -0000       1.14
+++ ecore_desktop_menu.c        5 Sep 2006 16:32:33 -0000       1.15
@@ -55,6 +55,7 @@
    int                 length, menu_length, level;
 };
 
+static int                 _ecore_desktop_menu_make_apps(const void *data, 
Ecore_Desktop_Tree * tree, int element, int level);
 static Ecore_Desktop_Tree *_ecore_desktop_menu_get0(char *file, 
Ecore_Desktop_Tree * merge_stack, int level);
 static Ecore_Desktop_Tree *_ecore_desktop_menu_create_menu();
 static int          _ecore_desktop_menu_unxml(const void *data,
@@ -112,6 +113,78 @@
  *
  * Functions that deal with freedesktop.org menus.
  */
+
+
+EAPI void
+ecore_desktop_menu_for_each(void (*func)(char *name, char *path, Ecore_Hash 
*apps))
+{
+   char *menu_file;
+   
+   /* Find the main menu file. */
+   menu_file = ecore_desktop_paths_file_find(ecore_desktop_paths_menus, 
+                                                 "applications.menu", -1, 
NULL, NULL);
+   if (!menu_file)
+      {
+         /* Try various quirks of various systems. */
+         menu_file = ecore_desktop_paths_file_find(ecore_desktop_paths_menus, 
+                                                 "debian-menu.menu", -1, NULL, 
NULL);
+         /* FIXME: If all else fails, run debians funky menu generator shit. */
+      }
+
+   if (menu_file)
+      {
+//         char *path;
+            
+//      path = ecore_file_get_dir(menu_file);
+//      if (path)
+           {
+              Ecore_Desktop_Tree *menus;
+                 
+              /* convert the xml into menus */
+              menus = ecore_desktop_menu_get(menu_file);
+              if (menus)
+                 {
+                    /* create the .desktop and order files from the menu */
+                    ecore_desktop_tree_foreach(menus, 0, 
_ecore_desktop_menu_make_apps, func);
+// FIXME: Can't free this just yet, causes major memory corruption.
+//                  ecore_desktop_tree_del(menus);
+                 }
+//            free(path);
+              
+           }
+        free(menu_file);
+      }
+}
+
+static int
+_ecore_desktop_menu_make_apps(const void *data, Ecore_Desktop_Tree * tree, int 
element, int level)
+{
+   if (tree->elements[element].type == ECORE_DESKTOP_TREE_ELEMENT_TYPE_STRING)
+     {
+        if (strncmp((char *)tree->elements[element].element, "<MENU ", 6) == 0)
+          {
+             char *path;
+             char *name;
+             Ecore_Hash *apps;
+            void (*func)(char *name, char *path, Ecore_Hash *apps);
+
+             func = data;
+             name = (char *)tree->elements[element].element;
+             path = (char *)tree->elements[element + 1].element;
+#ifdef DEBUG
+             printf("MAKING MENU - %s \t\t%s\n", path, name);
+#endif
+//             pool = (Ecore_Hash *) tree->elements[element + 2].element;
+             apps = (Ecore_Hash *) tree->elements[element + 4].element;
+            path = &path[11];
+
+             if (func)
+                func(name, path, apps);
+          }
+     }
+   return 0;
+}
+
 
 /**
  * Decode a freedesktop.org menu XML jungle.
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/ecore_desktop_private.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- ecore_desktop_private.h     17 Aug 2006 17:09:23 -0000      1.4
+++ ecore_desktop_private.h     5 Sep 2006 16:32:33 -0000       1.5
@@ -15,6 +15,14 @@
 #define E_NEW_BIG(s, n) (s *)malloc(n * sizeof(s))
 #define E_FREE(p) { if (p) {free(p); p = NULL;} }
 
+extern Ecore_List         *ecore_desktop_paths_config;
+extern Ecore_List         *ecore_desktop_paths_menus;
+extern Ecore_List         *ecore_desktop_paths_directories;
+extern Ecore_List         *ecore_desktop_paths_desktops;
+extern Ecore_List         *ecore_desktop_paths_icons;
+extern Ecore_List         *ecore_desktop_paths_kde_legacy;
+extern Ecore_List         *ecore_desktop_paths_xsessions;
+
 # ifdef __cplusplus
 extern              "C"
 {



-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to