diff --git a/src/bin/e_fdo_menu_to_order.c b/src/bin/e_fdo_menu_to_order.c
index 7ea188fff..6b858a40f 100644
--- a/src/bin/e_fdo_menu_to_order.c
+++ b/src/bin/e_fdo_menu_to_order.c
@@ -2,26 +2,23 @@
//#define DEBUG 1
-//extern int menu_count, item_count;
+
+struct order_data
+{
+ char order_path[PATH_MAX];
+ Ecore_Sheap *sheap;
+};
static int _e_menu_make_apps(const void *data, Ecore_Desktop_Tree * tree, int element, int level);
static void _e_menu_dump_each_hash_node(void *value, void *user_data);
-static int _e_search_list(Ecore_List *list, const char *search);
+static void _e_fdo_menu_to_order_add_sheap(Ecore_Sheap *sheap, const char *order_path, const char *file);
EAPI void
e_fdo_menu_to_order(void)
{
int i;
- /* NEW STRATEGY -
- *
- * if there is no applications.menu
- * try debian-menu.menu instead.
- * if all else fails
- * run debians funky menu generator shit.
- */
char *menu_file;
- /* Should rm -fr ~/.e/e/applications/menu/all to make sure we start from a clean slate. */
/* Find the main menu file. */
menu_file = ecore_desktop_paths_file_find(ecore_desktop_paths_menus,
"applications.menu", -1, NULL, NULL);
@@ -30,6 +27,7 @@ e_fdo_menu_to_order(void)
/* 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)
@@ -45,7 +43,12 @@ e_fdo_menu_to_order(void)
menus = ecore_desktop_menu_get(menu_file);
if (menus)
{
- /* create the .eap and order files from the menu */
+ char dir[PATH_MAX];
+
+ /* Nuke the old menus. */
+ snprintf(dir, sizeof(dir), "%s/.e/e/applications/menu/all/", ecore_desktop_home_get());
+ ecore_file_recursive_rm(dir);
+ /* create the .desktop and order files from the menu */
ecore_desktop_tree_foreach(menus, 0, _e_menu_make_apps, path);
// FIXME: Can't free this just yet, causes major memory corruption.
// ecore_desktop_tree_del(menus);
@@ -64,20 +67,53 @@ _e_menu_make_apps(const void *data, Ecore_Desktop_Tree * tree, int element, int
{
if (strncmp((char *)tree->elements[element].element, "