diff --git a/legacy/efreet/src/bin/ef_menu.c b/legacy/efreet/src/bin/ef_menu.c
index 0d0e1d62a4..c274ee1960 100644
--- a/legacy/efreet/src/bin/ef_menu.c
+++ b/legacy/efreet/src/bin/ef_menu.c
@@ -64,10 +64,8 @@ ef_cb_menu_get(void)
#endif
printf("\n");
efreet_menu_dump(menu, "");
-#if 0
unlink("/tmp/test.menu");
efreet_menu_save(menu, "/tmp/test.menu");
-#endif
efreet_menu_free(menu);
return 1;
diff --git a/legacy/efreet/src/lib/efreet_menu.c b/legacy/efreet/src/lib/efreet_menu.c
index 5ff388f753..0aecb09ef0 100644
--- a/legacy/efreet/src/lib/efreet_menu.c
+++ b/legacy/efreet/src/lib/efreet_menu.c
@@ -203,7 +203,7 @@ typedef struct Efreet_Menu_Desktop Efreet_Menu_Desktop;
struct Efreet_Menu_Desktop
{
Efreet_Desktop *desktop; /**< The desktop we refer too */
- char *id; /**< The desktop file id */
+ const char *id; /**< The desktop file id */
unsigned char allocated:1; /**< If this desktop has been allocated */
};
@@ -358,11 +358,9 @@ static void efreet_menu_concatenate(Efreet_Menu_Internal *dest, Efreet_Menu_Inte
static int efreet_menu_cb_menu_compare(Efreet_Menu_Internal *a, Efreet_Menu_Internal *b);
static int efreet_menu_cb_md_compare(Efreet_Menu_Desktop *a, Efreet_Menu_Desktop *b);
-static int efreet_menu_save_menu(Efreet_Menu_Internal *internal, FILE *f, int indent);
-static int efreet_menu_save_layout(Ecore_List *list, FILE *f, int indent);
-static int efreet_menu_save_filter(Ecore_List *list, FILE *f, int indent);
-static int efreet_menu_save_filter_op(Efreet_Menu_Filter_Op *op, FILE *f, int indent);
+static int efreet_menu_save_menu(Efreet_Menu *menu, FILE *f, int indent);
static int efreet_menu_save_indent(FILE *f, int indent);
+
static void efreet_menu_path_set(Efreet_Menu_Internal *internal, const char *path);
/**
@@ -678,99 +676,39 @@ efreet_menu_parse(const char *path)
* @brief Saves the menu to file
*/
int
-efreet_menu_save(Efreet_Menu_Internal *internal, const char *path __UNUSED__)
+efreet_menu_save(Efreet_Menu *menu, const char *path)
{
FILE *f;
int ret;
- f = stdout; //fopen(path, "w");
+ f = fopen(path, "w");
if (!f) return 0;
fprintf(f, "\n");
fprintf(f, "\n");
- ret = efreet_menu_save_menu(internal, f, 0);
-// fclose(f);
+ ret = efreet_menu_save_menu(menu, f, 0);
+ fclose(f);
return ret;
}
static int
-efreet_menu_save_menu(Efreet_Menu_Internal *internal, FILE *f, int indent)
+efreet_menu_save_menu(Efreet_Menu *menu, FILE *f, int indent)
{
- /* XXX: LegacyDir, KDELegacyDir */
- /* We don't support saving moves. The menu saved has already gone thorugh
- * moves. (Move (Old, New)) */
- /* We don't support deletes, as we will directly modify this menu.
- * (Deleted, NotDeleted) */
- /* We don't support merges. The menu saved has already gone thorugh merges.
- * (MergeFile, MergeDir, DefaultMergeDirs */
- Ecore_List *dirs;
- int default_app_dirs = 0, default_directory_dirs = 0;
-
efreet_menu_save_indent(f, indent);
fprintf(f, "
\n");
return 1;
}
-static int
-efreet_menu_save_layout(Ecore_List *list, FILE *f, int indent)
-{
- Efreet_Menu_Layout *layout;
-
- if (ecore_list_is_empty(list)) return 1;
-
- ecore_list_goto_first(list);
- while ((layout = ecore_list_next(list)))
- {
- efreet_menu_save_indent(f, indent);
- if (layout->type == EFREET_MENU_LAYOUT_MENUNAME)
- fprintf(f, "%s\n", layout->name);
- else if (layout->type == EFREET_MENU_LAYOUT_FILENAME)
- fprintf(f, "%s\n", layout->name);
- else if (layout->type == EFREET_MENU_LAYOUT_MERGE)
- fprintf(f, "\n", layout->name);
- else if (layout->type == EFREET_MENU_LAYOUT_SEPARATOR)
- fprintf(f, "\n");
- }
- return 1;
-}
-
-static int
-efreet_menu_save_filter(Ecore_List *list, FILE *f, int indent)
-{
- Efreet_Menu_Filter *filter;
-
- ecore_list_goto_first(list);
- while ((filter = ecore_list_next(list)))
- {
- const char *type = "";
- if (filter->type == EFREET_MENU_FILTER_INCLUDE) type = "Include";
- else type = "Exclude";
-
- efreet_menu_save_indent(f, indent);
- fprintf(f, "<%s>\n", type);
- if (!efreet_menu_save_filter_op(filter->op, f, indent + 1)) return 0;
- efreet_menu_save_indent(f, indent);
- fprintf(f, "%s>\n", type);
- }
- return 1;
-}
-
-static int
-efreet_menu_save_filter_op(Efreet_Menu_Filter_Op *op, FILE *f, int indent)
-{
- if (op->all)
- {
- efreet_menu_save_indent(f, indent);
- fprintf(f, "\n");
- }
- if (op->categories)
- {
- char *cat;
-
- ecore_list_goto_first(op->categories);
- while ((cat = ecore_list_next(op->categories)))
- {
- efreet_menu_save_indent(f, indent);
- fprintf(f, "%s\n", cat);
- }
- }
- if (op->filenames)
- {
- char *file;
-
- ecore_list_goto_first(op->filenames);
- while ((file = ecore_list_next(op->filenames)))
- {
- efreet_menu_save_indent(f, indent);
- fprintf(f, "%s\n", file);
- }
- }
- if (op->filters)
- {
- Efreet_Menu_Filter_Op *child;
-
- ecore_list_goto_first(op->filters);
- while ((child = ecore_list_next(op->filters)))
- {
- const char *type = "";
- if (child->type == EFREET_MENU_FILTER_OP_OR) type = "Or";
- else if (child->type == EFREET_MENU_FILTER_OP_AND) type = "And";
- else type = "Not";
-
- efreet_menu_save_indent(f, indent);
- fprintf(f, "<%s>\n", type);
- efreet_menu_save_filter_op(child, f, indent + 1);
- efreet_menu_save_indent(f, indent);
- fprintf(f, "%s>\n", type);
- }
- }
- return 1;
-}
-
static int
efreet_menu_save_indent(FILE *f, int indent)
{
@@ -2547,7 +2406,7 @@ efreet_menu_desktop_new(void)
static void
efreet_menu_desktop_free(Efreet_Menu_Desktop *md)
{
- IF_FREE(md->id);
+ IF_RELEASE(md->id);
FREE(md);
}
@@ -2578,7 +2437,7 @@ efreet_menu_free(Efreet_Menu *entry)
IF_RELEASE(entry->name);
IF_RELEASE(entry->icon);
IF_FREE_LIST(entry->entries);
- IF_FREE(entry->id);
+ IF_RELEASE(entry->id);
FREE(entry);
}
@@ -2811,7 +2670,7 @@ void efreet_menu_process_app_pool(Ecore_List *pool, Ecore_List *applications,
if (efreet_menu_filter_matches(filter->op, md))
{
ecore_list_append(applications, md);
- ecore_hash_set(matches, md->id, md);
+ ecore_hash_set(matches, (void *)md->id, md);
md->allocated = 1;
}
}
@@ -3466,7 +3325,7 @@ efreet_menu_app_dir_scan(Efreet_Menu_Internal *internal, const char *path, const
menu_desktop = efreet_menu_desktop_new();
menu_desktop->desktop = desktop;
- menu_desktop->id = strdup(buf2);
+ menu_desktop->id = ecore_string_instance(buf2);
ecore_list_prepend(internal->app_pool, menu_desktop);
}
}
@@ -3649,7 +3508,7 @@ efreet_menu_layout_menu(Efreet_Menu_Internal *internal)
/* init entry */
entry = efreet_menu_entry_new();
entry->type = EFREET_MENU_ENTRY_MENU;
- if (internal->file.name) entry->id = strdup(internal->file.name);
+ entry->id = ecore_string_instance(internal->name.internal);
entry->name = ecore_string_instance(internal->name.name);
if (internal->directory) entry->icon = ecore_string_instance(internal->directory->icon);
entry->entries = ecore_list_new();
@@ -3718,7 +3577,7 @@ efreet_menu_layout_desktop(Efreet_Menu_Desktop *md)
/* init entry */
entry = efreet_menu_entry_new();
entry->type = EFREET_MENU_ENTRY_DESKTOP;
- entry->id = strdup(md->id);
+ entry->id = ecore_string_instance(md->id);
entry->name = ecore_string_instance(md->desktop->name);
if (md->desktop->icon) entry->icon = ecore_string_instance(md->desktop->icon);
entry->desktop = md->desktop;
diff --git a/legacy/efreet/src/lib/efreet_menu.h b/legacy/efreet/src/lib/efreet_menu.h
index 5ee4dd8536..9b9efbbaf7 100644
--- a/legacy/efreet/src/lib/efreet_menu.h
+++ b/legacy/efreet/src/lib/efreet_menu.h
@@ -40,7 +40,7 @@ typedef struct Efreet_Menu Efreet_Menu;
struct Efreet_Menu
{
Efreet_Menu_Entry_Type type;
- char *id; /**< File-id for desktop and relative name for menu */
+ const char *id; /**< File-id for desktop and relative name for menu */
const char *name; /**< Name this entry should show */
const char *icon; /**< Icon for this entry */
@@ -53,10 +53,7 @@ int efreet_menu_kde_legacy_init(void);
Efreet_Menu *efreet_menu_get(void);
Efreet_Menu *efreet_menu_parse(const char *path);
-
-#if 0
int efreet_menu_save(Efreet_Menu *menu, const char *path);
-#endif
void efreet_menu_free(Efreet_Menu *menu);
void efreet_menu_dump(Efreet_Menu *menu, const char *indent);