ef_locale.c \
ef_desktop.c \
ef_menu.c \
+ef_utils.c \
main.c
+/* vim: set sw=4 ts=4 sts=4 et: */
#include "Efreet.h"
#include "efreet_private.h"
printf("efreet_menu_get() returned NULL\n");
return 0;
}
-#if 0
- if (strcmp(menu->name.internal, "Applications"))
- {
- printf("menu name didn't match\n");
- return 0;
- }
+ printf("\n");
+ efreet_menu_dump(menu, "");
+ efreet_menu_free(menu);
+
+ return 1;
+}
- if (!menu->moves || ecore_list_nodes(menu->moves) != 2)
+int
+ef_cb_menu_save(void)
+{
+ Efreet_Menu *menu;
+
+// menu = efreet_menu_get();
+ menu = efreet_menu_parse(PACKAGE_DATA_DIR"/efreet/test/test.menu");
+ if (!menu)
{
- printf("Missing moves\n");
+ printf("efreet_menu_get() returned NULL\n");
return 0;
}
+ unlink("/tmp/test.menu");
+ return efreet_menu_save(menu, "/tmp/test.menu");
+}
- if (menu->current_move)
+int
+ef_cb_menu_edit(void)
+{
+ Efreet_Menu *menu, *entry;
+ Efreet_Desktop *desktop;
+
+// menu = efreet_menu_get();
+ menu = efreet_menu_parse(PACKAGE_DATA_DIR"/efreet/test/test.menu");
+ if (!menu)
{
- printf("Current move still set\n");
+ printf("efreet_menu_get() returned NULL\n");
return 0;
}
+#if 0
+ printf("\n");
+ efreet_menu_dump(menu, "");
+ printf("\n");
+#endif
- if (menu->filters)
+ desktop = efreet_desktop_get(PACKAGE_DATA_DIR"/efreet/test/test.desktop");
+ if (!desktop)
{
- printf("Have filters when we shouldn't\n");
+ printf("No desktop found.\n");
return 0;
}
- ef_menu_desktop_exec(menu);
+
+ efreet_menu_desktop_insert(menu, desktop, 0);
+#if 0
+ printf("\n");
+ efreet_menu_dump(menu, "");
+ printf("\n");
+#endif
+ ecore_list_goto_first(menu->entries);
+ entry = ecore_list_current(menu->entries);
+ if (desktop != entry->desktop) return 0;
+
+ efreet_menu_desktop_insert(menu, desktop, 2);
+#if 0
+ printf("\n");
+ efreet_menu_dump(menu, "");
+ printf("\n");
#endif
+ ecore_list_goto_index(menu->entries, 2);
+ entry = ecore_list_current(menu->entries);
+ if (desktop != entry->desktop) return 0;
+
+ efreet_menu_desktop_insert(menu, desktop, -1);
+#if 0
printf("\n");
efreet_menu_dump(menu, "");
- unlink("/tmp/test.menu");
- efreet_menu_save(menu, "/tmp/test.menu");
- efreet_menu_free(menu);
+ printf("\n");
+#endif
+ ecore_list_goto_last(menu->entries);
+ entry = ecore_list_current(menu->entries);
+ if (desktop != entry->desktop) return 0;
return 1;
}
--- /dev/null
+/* vim: set sw=4 ts=4 sts=4 et: */
+#include "Efreet.h"
+#include "efreet_private.h"
+
+int
+ef_cb_utils(void)
+{
+ char *tmp;
+
+ tmp = efreet_util_path_in_default("applications",
+ "/usr/share/applications/test.desktop");
+ if (strcmp(tmp, "/usr/share/applications"))
+ {
+ free(tmp);
+ return 0;
+ }
+ free(tmp);
+
+ tmp = efreet_util_path_to_file_id("/usr/share/applications",
+ "/usr/share/applications/this/tmp/test.desktop");
+ if (strcmp(tmp, "this-tmp-test.desktop"))
+ {
+ free(tmp);
+ return 0;
+ }
+ free(tmp);
+ return 1;
+}
int ef_cb_desktop_file_id(void);
#endif
int ef_cb_menu_get(void);
+int ef_cb_menu_save(void);
+int ef_cb_menu_edit(void);
int ef_cb_ini_long_line(void);
+int ef_cb_utils(void);
typedef struct Efreet_Test Efreet_Test;
struct Efreet_Test
{"Desktop File ID", ef_cb_desktop_file_id},
#endif
{"Menu Parsing", ef_cb_menu_get},
+ {"Menu Save", ef_cb_menu_save},
+ {"Menu Edit", ef_cb_menu_edit},
+ {"Utils", ef_cb_utils},
{NULL, NULL}
};
/**
* @param menu: The menu to work with
+ * @param desktop: The desktop to insert
+ * @return Returns 1 on success, 0 on failure
+ * @brief Insert a desktop element in a menu structure. Only accepts desktop files
+ * in default directories.
+ */
+int
+efreet_menu_desktop_insert(Efreet_Menu *menu, Efreet_Desktop *desktop, int pos)
+{
+ Efreet_Menu *entry;
+ char *path;
+ char *id;
+
+ if (!desktop || !menu) return 0;
+ path = efreet_util_path_in_default("applications", desktop->orig_path);
+ if (!path) return 0;
+ id = efreet_util_path_to_file_id(path, desktop->orig_path);
+
+ entry = efreet_menu_entry_new();
+ entry->type = EFREET_MENU_ENTRY_DESKTOP;
+ entry->id = ecore_string_instance(id);
+ entry->name = ecore_string_instance(desktop->name);
+ if (desktop->icon) entry->icon = ecore_string_instance(desktop->icon);
+ entry->desktop = desktop;
+
+ if (!menu->entries)
+ {
+ menu->entries = ecore_list_new();
+ ecore_list_set_free_cb(menu->entries, ECORE_FREE_CB(efreet_menu_free));
+ }
+
+ if (pos < 0 || pos >= ecore_list_nodes(menu->entries))
+ ecore_list_append(menu->entries, entry);
+ else
+ {
+ ecore_list_goto_index(menu->entries, pos);
+ ecore_list_insert(menu->entries, entry);
+ }
+
+ free(id);
+ free(path);
+ return 1;
+}
+
+/**
+ * @param menu: The menu to work with
* @param indent: The indent level to print the menu at
* @return Returns no value
* @brief Dumps the contents of the menu to the command line
while ((entry = ecore_list_next(menu->entries)))
{
if (entry->type == EFREET_MENU_ENTRY_SEPARATOR)
- printf("%s|---\n", indent);
+ printf("%s|---\n", new_indent);
else if (entry->type == EFREET_MENU_ENTRY_DESKTOP)
- printf("%s|-%s\n", indent, entry->name);
+ printf("%s|-%s\n", new_indent, entry->name);
else if (entry->type == EFREET_MENU_ENTRY_MENU)
efreet_menu_dump(entry, new_indent);
else if (entry->type == EFREET_MENU_ENTRY_HEADER)
- printf("%s|---%s\n", indent, entry->name);
+ printf("%s|---%s\n", new_indent, entry->name);
}
FREE(new_indent);
int efreet_menu_save(Efreet_Menu *menu, const char *path);
void efreet_menu_free(Efreet_Menu *menu);
+int efreet_menu_desktop_insert(Efreet_Menu *menu, Efreet_Desktop *desktop, int pos);
+
void efreet_menu_dump(Efreet_Menu *menu, const char *indent);
/**
#include "Efreet.h"
#include "efreet_private.h"
-int
+char *
efreet_util_path_in_default(const char *section, const char *path)
{
Ecore_List *dirs;
- int ret = 0;
+ char *ret = NULL;
char *dir;
dirs = efreet_default_dirs_get(efreet_data_home_get(), efreet_data_dirs_get(),
len = strlen(dir);
if (!strncmp(path, dir, strlen(dir)))
{
- ret = 1;
+ ret = strdup(dir);
break;
}
}
ecore_list_destroy(dirs);
return ret;
}
+
+char *
+efreet_util_path_to_file_id(const char *base, const char *path)
+{
+ size_t len;
+ char *id, *p;
+
+ len = strlen(base);
+#if 0
+ if (strlen(path) <= len) return NULL;
+ if (!strncmp(path, base, len)) return NULL;
+#endif
+
+ id = strdup(path + len + 1);
+ p = id;
+ while (*p)
+ {
+ if (*p == '/') *p = '-';
+ p++;
+ }
+ return id;
+}
#ifndef EFREET_UTILS_H
#define EFREET_UTILS_H
-int efreet_util_path_in_default(const char *section, const char *path);
+char *efreet_util_path_in_default(const char *section, const char *path);
+char *efreet_util_path_to_file_id(const char *base, const char *path);
#endif