From: Enlightenment C. <no...@cv...> - 2007-02-05 15:40:13
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/bin Modified Files: ef_desktop.c Log Message: Declare function. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/bin/ef_desktop.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- ef_desktop.c 5 Feb 2007 21:16:55 -0000 1.4 +++ ef_desktop.c 5 Feb 2007 21:39:59 -0000 1.5 @@ -363,7 +363,7 @@ ef_cb_desktop_type_parse(void) { Efreet_Desktop *desktop; - int ret = 1, my_type; + int my_type; char *val; /* add my custom desktop type to efreet */ |
From: Enlightenment C. <no...@cv...> - 2007-02-05 15:40:13
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Modified Files: efreet_desktop.h Log Message: Declare function. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_desktop.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- efreet_desktop.h 5 Feb 2007 21:16:55 -0000 1.5 +++ efreet_desktop.h 5 Feb 2007 21:39:59 -0000 1.6 @@ -127,6 +127,7 @@ Efreet_Desktop_Type_Parse_Cb parse_func, Efreet_Desktop_Type_Save_Cb save_func, Efreet_Desktop_Type_Free_Cb free_func); +void *efreet_desktop_type_data_get(Efreet_Desktop *desktop); /** * @} |
From: Enlightenment C. <no...@cv...> - 2007-02-05 20:16:41
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/bin Modified Files: ef_menu.c Log Message: Quick and dirty saving of a Menu. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/bin/ef_menu.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- ef_menu.c 3 Feb 2007 13:05:30 -0000 1.1 +++ ef_menu.c 6 Feb 2007 02:16:33 -0000 1.2 @@ -64,10 +64,8 @@ #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; |
From: Enlightenment C. <no...@cv...> - 2007-02-05 20:16:44
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Modified Files: efreet_menu.c efreet_menu.h Log Message: Quick and dirty saving of a Menu. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_menu.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- efreet_menu.c 6 Feb 2007 02:04:50 -0000 1.2 +++ efreet_menu.c 6 Feb 2007 02:16:33 -0000 1.3 @@ -203,7 +203,7 @@ 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 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 @@ * @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, "<?xml version=\"1.0\"?>\n"); fprintf(f, "<!DOCTYPE Menu PUBLIC \"-//freedesktop//DTD Menu 1.0//EN\" " "\"http://standards.freedesktop.org/menu-spec/menu-1.0.dtd\">\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, "<Menu>\n"); efreet_menu_save_indent(f, indent + 1); - fprintf(f, "<Name>%s</Name>\n", internal->name.internal); - if (internal->app_dirs) - { - Efreet_Menu_App_Dir *dir; - dirs = efreet_default_dirs_get(efreet_data_home_get(), efreet_data_dirs_get(), - "applications"); - - ecore_list_goto_first(internal->app_dirs); - while ((dir = ecore_list_next(internal->app_dirs))) - { - if (dirs && ecore_list_find(dirs, ECORE_COMPARE_CB(strcmp), dir->path)) - default_app_dirs = 1; - else - { - size_t len; + fprintf(f, "<Name>%s</Name>\n", menu->name); - efreet_menu_save_indent(f, indent + 1); - len = strlen(internal->file.path); - if (!strncmp(dir->path, internal->file.path, len)) - fprintf(f, "<AppDir>%s</AppDir>\n", dir->path + len + 1); - else - fprintf(f, "<AppDir>%s</AppDir>\n", dir->path); - } - } - IF_FREE_LIST(dirs); - } - if (default_app_dirs) + if (indent == 0) { + /* Only save these for the root element */ efreet_menu_save_indent(f, indent + 1); fprintf(f, "<DefaultAppDirs/>\n"); - } - - if (internal->directory_dirs) - { - const char *dir; - dirs = efreet_default_dirs_get(efreet_data_home_get(), efreet_data_dirs_get(), - "desktop-directories"); - - ecore_dlist_goto_first(internal->directory_dirs); - while ((dir = ecore_dlist_next(internal->directory_dirs))) - { - if (dirs && ecore_list_find(dirs, ECORE_COMPARE_CB(strcmp), dir)) - default_directory_dirs = 1; - else - { - size_t len; - - efreet_menu_save_indent(f, indent + 1); - len = strlen(internal->file.path); - if (!strncmp(dir, internal->file.path, len)) - fprintf(f, "<DirectoryDir>%s</DirectoryDir>\n", dir + len + 1); - else - fprintf(f, "<DirectoryDir>%s</DirectoryDir>\n", dir); - } - } - IF_FREE_LIST(dirs); - } - if (default_directory_dirs) - { efreet_menu_save_indent(f, indent + 1); fprintf(f, "<DefaultDirectoryDirs/>\n"); } + + /* XXX: This should be in the menu struct if (internal->directories) { const char *dir; @@ -782,147 +720,68 @@ fprintf(f, "<Directory>%s</Directory>\n", dir); } } + */ - if (internal->default_layout) - { - efreet_menu_save_indent(f, indent + 1); - fprintf(f, "<DefaultLayout show_empty=\"%s\" inline=\"%s\" inline_header=\"%s\"" - " inline_limit=\"%d\" inline_alias=\"%s\">\n", - internal->show_empty ? "true" : "false", - internal->in_line ? "true" : "false", - internal->inline_header ? "true" : "false", - internal->inline_limit, - internal->inline_alias ? "true" : "false"); - if (!efreet_menu_save_layout(internal->default_layout, f, indent + 2)) return 0; - efreet_menu_save_indent(f, indent + 1); - fprintf(f, "</DefaultLayout>\n"); - } - if (internal->layout) + if (menu->entries) { + Efreet_Menu *entry; + int has_desktop = 0, has_menu = 0; + efreet_menu_save_indent(f, indent + 1); fprintf(f, "<Layout>\n"); - if (!efreet_menu_save_layout(internal->layout, f, indent + 2)) return 0; - efreet_menu_save_indent(f, indent + 1); - fprintf(f, "</Layout>\n"); - } - if (internal->seen_allocated) - { - efreet_menu_save_indent(f, indent + 1); - if (internal->only_unallocated) - fprintf(f, "<OnlyUnallocated/>\n"); - else - fprintf(f, "<NotOnlyUnallocated/>\n"); - } - /* XXX: Print filters, not just the applications in this menu */ - if (internal->filters) - { - if (!efreet_menu_save_filter(internal->filters, f, indent + 1)) return 0; - } - if (internal->sub_menus) - { - Efreet_Menu_Internal *sub; - ecore_list_goto_first(internal->sub_menus); - while ((sub = ecore_list_next(internal->sub_menus))) - efreet_menu_save_menu(sub, f, indent + 1); - } - efreet_menu_save_indent(f, indent); - fprintf(f, "</Menu>\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, "<Menuname>%s</Menuname>\n", layout->name); - else if (layout->type == EFREET_MENU_LAYOUT_FILENAME) - fprintf(f, "<Filename>%s</Filename>\n", layout->name); - else if (layout->type == EFREET_MENU_LAYOUT_MERGE) - fprintf(f, "<Merge type=\"%s\"/>\n", layout->name); - else if (layout->type == EFREET_MENU_LAYOUT_SEPARATOR) - fprintf(f, "<Separator/>\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, "<All/>\n"); - } - if (op->categories) - { - char *cat; - - ecore_list_goto_first(op->categories); - while ((cat = ecore_list_next(op->categories))) + ecore_list_goto_first(menu->entries); + while ((entry = ecore_list_next(menu->entries))) { - efreet_menu_save_indent(f, indent); - fprintf(f, "<Category>%s</Category>\n", cat); + if (entry->type == EFREET_MENU_ENTRY_MENU) + { + efreet_menu_save_indent(f, indent + 2); + fprintf(f, "<Menuname>%s</Menuname>\n", entry->id); + has_menu = 1; + } + else if (entry->type == EFREET_MENU_ENTRY_DESKTOP) + { + efreet_menu_save_indent(f, indent + 2); + fprintf(f, "<Filename>%s</Filename>\n", entry->id); + has_desktop = 1; + } + else if (entry->type == EFREET_MENU_ENTRY_SEPARATOR) + { + efreet_menu_save_indent(f, indent + 2); + fprintf(f, "<Separator/>\n"); + } } - } - if (op->filenames) - { - char *file; + efreet_menu_save_indent(f, indent + 1); + fprintf(f, "</Layout>\n"); - ecore_list_goto_first(op->filenames); - while ((file = ecore_list_next(op->filenames))) + if (has_desktop) { - efreet_menu_save_indent(f, indent); - fprintf(f, "<Filename>%s</Filename>\n", file); + efreet_menu_save_indent(f, indent + 1); + fprintf(f, "<Include>\n"); + ecore_list_goto_first(menu->entries); + while ((entry = ecore_list_next(menu->entries))) + { + if (entry->type == EFREET_MENU_ENTRY_DESKTOP) + { + efreet_menu_save_indent(f, indent + 2); + fprintf(f, "<Filename>%s</Filename>\n", entry->id); + } + } + efreet_menu_save_indent(f, indent + 1); + fprintf(f, "</Include>\n"); } - } - if (op->filters) - { - Efreet_Menu_Filter_Op *child; - ecore_list_goto_first(op->filters); - while ((child = ecore_list_next(op->filters))) + if (has_menu) { - 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); + ecore_list_goto_first(menu->entries); + while ((entry = ecore_list_next(menu->entries))) + { + if (entry->type == EFREET_MENU_ENTRY_MENU) + efreet_menu_save_menu(entry, f, indent + 1); + } } } + efreet_menu_save_indent(f, indent); + fprintf(f, "</Menu>\n"); return 1; } @@ -2547,7 +2406,7 @@ static void efreet_menu_desktop_free(Efreet_Menu_Desktop *md) { - IF_FREE(md->id); + IF_RELEASE(md->id); FREE(md); } @@ -2578,7 +2437,7 @@ 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 @@ 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 @@ 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 @@ /* 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 @@ /* 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; =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_menu.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- efreet_menu.h 3 Feb 2007 13:05:30 -0000 1.1 +++ efreet_menu.h 6 Feb 2007 02:16:33 -0000 1.2 @@ -40,7 +40,7 @@ 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 @@ 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); |
From: Enlightenment C. <no...@cv...> - 2007-02-06 19:12:26
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Modified Files: Efreet.h Makefile.am efreet_menu.c efreet_private.h Log Message: Function to check whether a path resides inside a default directory. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/Efreet.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- Efreet.h 3 Feb 2007 13:05:30 -0000 1.1 +++ Efreet.h 7 Feb 2007 01:12:25 -0000 1.2 @@ -32,6 +32,7 @@ #include "efreet_icon.h" #include "efreet_desktop.h" #include "efreet_menu.h" +#include "efreet_utils.h" int efreet_init(void); int efreet_shutdown(void); =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- Makefile.am 3 Feb 2007 13:05:30 -0000 1.1 +++ Makefile.am 7 Feb 2007 01:12:25 -0000 1.2 @@ -14,7 +14,8 @@ efreet_base.h \ efreet_desktop.h \ efreet_icon.h \ -efreet_menu.h +efreet_menu.h \ +efreet_utils.h EFREETSOURCES = \ efreet.c \ @@ -24,6 +25,7 @@ efreet_ini.c \ efreet_desktop.c \ efreet_menu.c \ +efreet_utils.c \ $(EFREETHEADERS) libefreet_la_SOURCES = \ =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_menu.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- efreet_menu.c 6 Feb 2007 02:16:33 -0000 1.3 +++ efreet_menu.c 7 Feb 2007 01:12:25 -0000 1.4 @@ -220,9 +220,6 @@ static Ecore_Hash *efreet_menu_layout_cbs = NULL; static const char *efreet_menu_prefix_get(void); -static Ecore_List *efreet_default_dirs_get(const char *user_dir, - Ecore_List *system_dirs, - const char *suffix); static Efreet_Menu_Internal *efreet_menu_by_name_find(Efreet_Menu_Internal *internal, const char *name, @@ -837,6 +834,38 @@ } /** + * @param user_dir: The user directory to work with + * @param system_dirs: The system directories to work with + * @param suffix: The path suffix to add + * @return Returns the list of directories + * @brief Creates the list of directories based on the user + * dir, system dirs and given suffix. + */ +Ecore_List * +efreet_default_dirs_get(const char *user_dir, Ecore_List *system_dirs, + const char *suffix) +{ + const char *xdg_dir; + char dir[PATH_MAX]; + Ecore_List *list; + + list = ecore_list_new(); + ecore_list_set_free_cb(list, ECORE_FREE_CB(free)); + + snprintf(dir, sizeof(dir), "%s/%s", user_dir, suffix); + ecore_list_append(list, strdup(dir)); + + ecore_list_goto_first(system_dirs); + while ((xdg_dir = ecore_list_next(system_dirs))) + { + snprintf(dir, sizeof(dir), "%s/%s", xdg_dir, suffix); + ecore_list_append(list, strdup(dir)); + } + + return list; +} + +/** * @internal * @return Returns a new Efreet_Menu_Internal struct * @brief Allocates and initializes a new Efreet_Menu_Internal structure @@ -908,39 +937,6 @@ else efreet_menu_prefix = strdup(""); return efreet_menu_prefix; -} - -/** - * @internal - * @param user_dir: The user directory to work with - * @param system_dirs: The system directories to work with - * @param suffix: The path suffix to add - * @return Returns the list of directories - * @brief Creates the list of directories based on the user - * dir, system dirs and given suffix. - */ -static Ecore_List * -efreet_default_dirs_get(const char *user_dir, Ecore_List *system_dirs, - const char *suffix) -{ - const char *xdg_dir; - char dir[PATH_MAX]; - Ecore_List *list; - - list = ecore_list_new(); - ecore_list_set_free_cb(list, ECORE_FREE_CB(free)); - - snprintf(dir, sizeof(dir), "%s/%s", user_dir, suffix); - ecore_list_append(list, strdup(dir)); - - ecore_list_goto_first(system_dirs); - while ((xdg_dir = ecore_list_next(system_dirs))) - { - snprintf(dir, sizeof(dir), "%s/%s", xdg_dir, suffix); - ecore_list_append(list, strdup(dir)); - } - - return list; } /** =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_private.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- efreet_private.h 3 Feb 2007 13:05:30 -0000 1.1 +++ efreet_private.h 7 Feb 2007 01:12:25 -0000 1.2 @@ -160,6 +160,9 @@ int efreet_menu_init(void); void efreet_menu_shutdown(void); +Ecore_List *efreet_default_dirs_get(const char *user_dir, + Ecore_List *system_dirs, + const char *suffix); int efreet_ini_init(void); int efreet_ini_shutdown(void); |
From: Enlightenment C. <no...@cv...> - 2007-02-06 19:13:09
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Added Files: efreet_utils.c efreet_utils.h Log Message: And remember to add files with function. |
From: Enlightenment C. <no...@cv...> - 2007-02-06 20:14:54
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Modified Files: efreet_menu.c efreet_menu.h efreet_utils.c efreet_utils.h Log Message: Function to add a new desktop to an existing menu. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_menu.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- efreet_menu.c 7 Feb 2007 01:12:25 -0000 1.4 +++ efreet_menu.c 7 Feb 2007 02:14:46 -0000 1.5 @@ -794,6 +794,51 @@ /** * @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 @@ -820,13 +865,13 @@ 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); =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_menu.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- efreet_menu.h 6 Feb 2007 02:16:33 -0000 1.2 +++ efreet_menu.h 7 Feb 2007 02:14:46 -0000 1.3 @@ -56,6 +56,8 @@ 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); /** =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- efreet_utils.c 7 Feb 2007 01:13:08 -0000 1.1 +++ efreet_utils.c 7 Feb 2007 02:14:46 -0000 1.2 @@ -2,11 +2,11 @@ #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(), @@ -20,11 +20,33 @@ 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; } =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- efreet_utils.h 7 Feb 2007 01:13:08 -0000 1.1 +++ efreet_utils.h 7 Feb 2007 02:14:46 -0000 1.2 @@ -2,6 +2,7 @@ #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 |
From: Enlightenment C. <no...@cv...> - 2007-02-06 20:15:19
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/bin Modified Files: Makefile.am ef_menu.c main.c Added Files: ef_utils.c Log Message: Function to add a new desktop to an existing menu. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/bin/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- Makefile.am 3 Feb 2007 13:05:30 -0000 1.1 +++ Makefile.am 7 Feb 2007 02:14:46 -0000 1.2 @@ -15,6 +15,7 @@ ef_locale.c \ ef_desktop.c \ ef_menu.c \ +ef_utils.c \ main.c =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/bin/ef_menu.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- ef_menu.c 6 Feb 2007 02:16:33 -0000 1.2 +++ ef_menu.c 7 Feb 2007 02:14:46 -0000 1.3 @@ -1,3 +1,4 @@ +/* vim: set sw=4 ts=4 sts=4 et: */ #include "Efreet.h" #include "efreet_private.h" @@ -36,37 +37,84 @@ 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; +} + +int +ef_cb_menu_save(void) +{ + Efreet_Menu *menu; - if (!menu->moves || ecore_list_nodes(menu->moves) != 2) +// 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; } =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/bin/main.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- main.c 5 Feb 2007 02:06:05 -0000 1.2 +++ main.c 7 Feb 2007 02:14:46 -0000 1.3 @@ -22,7 +22,10 @@ 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 @@ -51,6 +54,9 @@ {"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} }; |
From: Enlightenment C. <no...@cv...> - 2007-03-22 06:57:21
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/bin/compare Modified Files: Makefile.am Log Message: Link against ecore-desktop if it is required. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/bin/compare/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- Makefile.am 3 Feb 2007 13:05:30 -0000 1.1 +++ Makefile.am 22 Mar 2007 06:57:17 -0000 1.2 @@ -20,10 +20,10 @@ if HAVE_ECORE_DESKTOP ecore_alloc_DEPENDENCIES = ecore_alloc_SOURCES = ecore_alloc.c comp.h -ecore_alloc_LDADD = @ECORE_LIBS@ +ecore_alloc_LDADD = @ECORE_LIBS@ @ECORE_DESKTOP_LIBS@ compare_results_DEPENDENCIES = $(top_builddir)/src/lib/libefreet.la compare_results_SOURCES = compare_results.c comp.h -compare_results_LDADD = $(top_builddir)/src/lib/libefreet.la @ECORE_LIBS@ +compare_results_LDADD = $(top_builddir)/src/lib/libefreet.la @ECORE_LIBS@ @ECORE_DESKTOP_LIBS@ endif |
From: Enlightenment C. <no...@cv...> - 2007-03-22 15:55:57
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/m4 Removed Files: ac_path_generic.m4 Log Message: No longer needed. |
From: Enlightenment C. <no...@cv...> - 2007-03-22 15:56:22
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet Modified Files: .cvsignore Log Message: Ignore generated pkgconfig file. =================================================================== RCS file: /cvs/e/e17/libs/efreet/.cvsignore,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- .cvsignore 3 Feb 2007 23:03:57 -0000 1.1 +++ .cvsignore 22 Mar 2007 15:56:19 -0000 1.2 @@ -18,3 +18,4 @@ ltmain.sh missing stamp-h1 +*.pc |
From: Enlightenment C. <no...@cv...> - 2007-03-23 17:31:03
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Modified Files: efreet_desktop.c Log Message: Formatting. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_desktop.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- efreet_desktop.c 9 Feb 2007 12:20:49 -0000 1.6 +++ efreet_desktop.c 23 Mar 2007 17:31:01 -0000 1.7 @@ -1160,7 +1160,7 @@ } ecore_list_goto_first(execs); - while((exec = ecore_list_next(execs))) + while ((exec = ecore_list_next(execs))) { command->cb_command(command->data, command->desktop, exec, --num); } |
From: Enlightenment C. <no...@cv...> - 2007-03-24 11:23:34
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Modified Files: efreet_icon.c Log Message: Ignore themes without a name. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_icon.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- efreet_icon.c 3 Feb 2007 13:05:30 -0000 1.1 +++ efreet_icon.c 24 Mar 2007 11:23:29 -0000 1.2 @@ -176,6 +176,9 @@ theme = ecore_hash_get(efreet_icon_themes, dir); if (theme->hidden || theme->fake) continue; +#if !STRICT_SPEC + if (!theme->name.name) continue; +#endif ecore_list_append(list, theme); } |
From: Enlightenment C. <no...@cv...> - 2007-03-24 19:01:31
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Modified Files: efreet_menu.c Log Message: app_dirs isn't a dlist =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_menu.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- efreet_menu.c 7 Feb 2007 02:14:46 -0000 1.5 +++ efreet_menu.c 24 Mar 2007 19:01:29 -0000 1.6 @@ -949,7 +949,7 @@ IF_FREE_LIST(internal->applications); IF_FREE_DLIST(internal->directories); - IF_FREE_DLIST(internal->app_dirs); + IF_FREE_LIST(internal->app_dirs); IF_FREE_LIST(internal->app_pool); IF_FREE_DLIST(internal->directory_dirs); IF_FREE_HASH(internal->directory_cache); @@ -3208,7 +3208,7 @@ { if (!internal || internal->app_dirs) return; - internal->app_dirs = ecore_dlist_new(); + internal->app_dirs = ecore_list_new(); ecore_list_set_free_cb(internal->app_dirs, ECORE_FREE_CB(efreet_menu_app_dir_free)); } |
From: Enlightenment C. <no...@cv...> - 2007-03-24 21:59:35
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Modified Files: efreet_utils.c efreet_utils.h Log Message: util to get a desktop by file id. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- efreet_utils.c 7 Feb 2007 02:14:46 -0000 1.2 +++ efreet_utils.c 24 Mar 2007 21:59:34 -0000 1.3 @@ -36,10 +36,8 @@ char *id, *p; len = strlen(base); -#if 0 if (strlen(path) <= len) return NULL; - if (!strncmp(path, base, len)) return NULL; -#endif + if (strncmp(path, base, len)) return NULL; id = strdup(path + len + 1); p = id; @@ -49,4 +47,41 @@ p++; } return id; +} + +Efreet_Desktop * +efreet_util_desktop_by_file_id_get(const char *file_id) +{ + Efreet_Desktop *desktop = NULL; + Ecore_List *dirs; + const char *dir; + + if (!file_id) return NULL; + + dirs = efreet_default_dirs_get(efreet_data_home_get(), efreet_data_dirs_get(), + "applications"); + if (!dirs) return NULL; + + ecore_list_goto_first(dirs); + while ((dir = ecore_list_next(dirs))) + { + char *tmp, *p; + char buf[PATH_MAX]; + + tmp = strdup(file_id); + p = tmp; + + while (p) + { + snprintf(buf, sizeof(buf), "%s/%s", dir, file_id); + desktop = efreet_desktop_get(buf); + if (desktop) break; + p = strchr(p, '-'); + if (p) *p = '/'; + } + free(tmp); + if (desktop) break; + } + ecore_list_destroy(dirs); + return desktop; } =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- efreet_utils.h 7 Feb 2007 02:14:46 -0000 1.2 +++ efreet_utils.h 24 Mar 2007 21:59:34 -0000 1.3 @@ -2,7 +2,8 @@ #ifndef EFREET_UTILS_H #define EFREET_UTILS_H -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); +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); +Efreet_Desktop *efreet_util_desktop_by_file_id_get(const char *file_id); #endif |
From: Enlightenment C. <no...@cv...> - 2007-03-24 22:00:05
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/bin Modified Files: ef_utils.c Log Message: util to get a desktop by file id. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/bin/ef_utils.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- ef_utils.c 7 Feb 2007 02:14:46 -0000 1.1 +++ ef_utils.c 24 Mar 2007 21:59:34 -0000 1.2 @@ -5,24 +5,32 @@ int ef_cb_utils(void) { + Efreet_Desktop *desktop; char *tmp; tmp = efreet_util_path_in_default("applications", "/usr/share/applications/test.desktop"); - if (strcmp(tmp, "/usr/share/applications")) + if (!tmp || strcmp(tmp, "/usr/share/applications")) { - free(tmp); + if (tmp) free(tmp); return 0; } - free(tmp); + if (tmp) 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")) + if (!tmp || strcmp(tmp, "this-tmp-test.desktop")) { - free(tmp); + if (tmp) free(tmp); return 0; } - free(tmp); + if (tmp) free(tmp); + + desktop = efreet_util_desktop_by_file_id_get("kde-kresources.desktop"); + printf("kde-kresources.desktop: %p\n", desktop); + desktop = efreet_util_desktop_by_file_id_get("mplayer.desktop"); + printf("mplayer.desktop: %p\n", desktop); + desktop = efreet_util_desktop_by_file_id_get("nautilus-computer.desktop"); + printf("nautilus-computer.desktop: %p\n", desktop); return 1; } |
From: Enlightenment C. <no...@cv...> - 2007-03-24 22:50:13
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Modified Files: efreet_desktop.c efreet_utils.c Log Message: Use correct variable when searching for .desktop file. Don't allow missing .desktop files. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_desktop.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- efreet_desktop.c 23 Mar 2007 17:31:01 -0000 1.7 +++ efreet_desktop.c 24 Mar 2007 22:49:59 -0000 1.8 @@ -252,7 +252,9 @@ if (!ini->data) { efreet_ini_free(ini); - return desktop; + IF_FREE(desktop->orig_path); + free(desktop); + return NULL; } ok = efreet_ini_section_set(ini, "Desktop Entry"); =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- efreet_utils.c 24 Mar 2007 21:59:34 -0000 1.3 +++ efreet_utils.c 24 Mar 2007 22:49:59 -0000 1.4 @@ -73,7 +73,7 @@ while (p) { - snprintf(buf, sizeof(buf), "%s/%s", dir, file_id); + snprintf(buf, sizeof(buf), "%s/%s", dir, tmp); desktop = efreet_desktop_get(buf); if (desktop) break; p = strchr(p, '-'); |
From: Enlightenment C. <no...@cv...> - 2007-03-25 10:19:00
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet Modified Files: TODO Log Message: ++ =================================================================== RCS file: /cvs/e/e17/libs/efreet/TODO,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- TODO 3 Feb 2007 13:05:29 -0000 1.1 +++ TODO 25 Mar 2007 10:18:57 -0000 1.2 @@ -12,6 +12,10 @@ name. We should be creating intermediate menus for each of the /'d items instead of just making the name as we do now +- Add caching for faster lookup. The caches should be filled by an idler + - file-id for .desktop files from default app dirs. + - startup_wm_class + Notes from the Menu Spec test ----------------------------- |
From: Enlightenment C. <no...@cv...> - 2007-03-25 10:21:49
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/debian Added Files: .cvsignore Log Message: ignore generated changelog |
From: Enlightenment C. <no...@cv...> - 2007-03-25 10:42:32
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Modified Files: efreet.c efreet_private.h efreet_utils.c Log Message: Add init/shutdown for util. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- efreet.c 3 Feb 2007 13:05:30 -0000 1.1 +++ efreet.c 25 Mar 2007 10:42:28 -0000 1.2 @@ -25,6 +25,7 @@ if (!efreet_ini_init()) return --init; if (!efreet_desktop_init()) return --init; if (!efreet_menu_init()) return --init; + if (!efreet_util_init()) return --init; return init; } @@ -44,6 +45,7 @@ efreet_icon_shutdown(); efreet_xml_shutdown(); efreet_base_shutdown(); + efreet_util_shutdown(); IF_FREE(efreet_lang); IF_FREE(efreet_lang_country); =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_private.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- efreet_private.h 7 Feb 2007 01:12:25 -0000 1.2 +++ efreet_private.h 25 Mar 2007 10:42:28 -0000 1.3 @@ -178,6 +178,10 @@ size_t efreet_array_cat(char *buffer, size_t size, const char *strs[]); +int efreet_util_init(void); +void efreet_util_shutdown(void); + + /** * @} */ =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- efreet_utils.c 24 Mar 2007 22:49:59 -0000 1.4 +++ efreet_utils.c 25 Mar 2007 10:42:28 -0000 1.5 @@ -2,6 +2,17 @@ #include "Efreet.h" #include "efreet_private.h" +int +efreet_util_init(void) +{ + return 1; +} + +void +efreet_util_shutdown(void) +{ +} + char * efreet_util_path_in_default(const char *section, const char *path) { |
From: Enlightenment C. <no...@cv...> - 2007-03-25 10:49:06
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Modified Files: efreet_menu.c efreet_utils.c efreet_utils.h Log Message: Simplify function. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_menu.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- efreet_menu.c 24 Mar 2007 19:01:29 -0000 1.6 +++ efreet_menu.c 25 Mar 2007 10:49:04 -0000 1.7 @@ -803,13 +803,10 @@ 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); + id = efreet_util_path_to_file_id(desktop->orig_path); entry = efreet_menu_entry_new(); entry->type = EFREET_MENU_ENTRY_DESKTOP; @@ -833,7 +830,6 @@ } free(id); - free(path); return 1; } =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- efreet_utils.c 25 Mar 2007 10:42:28 -0000 1.5 +++ efreet_utils.c 25 Mar 2007 10:49:04 -0000 1.6 @@ -41,14 +41,27 @@ } char * -efreet_util_path_to_file_id(const char *base, const char *path) +efreet_util_path_to_file_id(const char *path) { size_t len; char *id, *p; + char *base; + + if (!path) return NULL; + base = efreet_util_path_in_default("applications", path); + if (!base) return NULL; len = strlen(base); - if (strlen(path) <= len) return NULL; - if (strncmp(path, base, len)) return NULL; + if (strlen(path) <= len) + { + free(base); + return NULL; + } + if (strncmp(path, base, len)) + { + free(base); + return NULL; + } id = strdup(path + len + 1); p = id; @@ -57,6 +70,7 @@ if (*p == '/') *p = '-'; p++; } + free(base); return id; } =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- efreet_utils.h 24 Mar 2007 21:59:34 -0000 1.3 +++ efreet_utils.h 25 Mar 2007 10:49:04 -0000 1.4 @@ -3,7 +3,7 @@ #define EFREET_UTILS_H 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); +char *efreet_util_path_to_file_id(const char *path); Efreet_Desktop *efreet_util_desktop_by_file_id_get(const char *file_id); #endif |
From: Enlightenment C. <no...@cv...> - 2007-03-25 10:49:35
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/bin Modified Files: ef_utils.c Log Message: Simplify function. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/bin/ef_utils.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- ef_utils.c 24 Mar 2007 21:59:34 -0000 1.2 +++ ef_utils.c 25 Mar 2007 10:49:04 -0000 1.3 @@ -8,23 +8,21 @@ Efreet_Desktop *desktop; char *tmp; + printf("\n"); tmp = efreet_util_path_in_default("applications", "/usr/share/applications/test.desktop"); - if (!tmp || strcmp(tmp, "/usr/share/applications")) + if (tmp) { - if (tmp) free(tmp); - return 0; + printf("%s\n", tmp); + free(tmp); } - if (tmp) free(tmp); - tmp = efreet_util_path_to_file_id("/usr/share/applications", - "/usr/share/applications/this/tmp/test.desktop"); - if (!tmp || strcmp(tmp, "this-tmp-test.desktop")) + tmp = efreet_util_path_to_file_id("/usr/share/applications/this/tmp/test.desktop"); + if (tmp) { - if (tmp) free(tmp); - return 0; + printf("%s\n", tmp); + free(tmp); } - if (tmp) free(tmp); desktop = efreet_util_desktop_by_file_id_get("kde-kresources.desktop"); printf("kde-kresources.desktop: %p\n", desktop); |
From: Enlightenment C. <no...@cv...> - 2007-03-25 10:55:48
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Modified Files: efreet.c Log Message: Position util init/shutdown relative to desktop. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- efreet.c 25 Mar 2007 10:42:28 -0000 1.2 +++ efreet.c 25 Mar 2007 10:55:45 -0000 1.3 @@ -24,8 +24,8 @@ if (!efreet_icon_init()) return --init; if (!efreet_ini_init()) return --init; if (!efreet_desktop_init()) return --init; - if (!efreet_menu_init()) return --init; if (!efreet_util_init()) return --init; + if (!efreet_menu_init()) return --init; return init; } @@ -40,12 +40,12 @@ { if (--init) return init; efreet_menu_shutdown(); + efreet_util_shutdown(); efreet_desktop_shutdown(); efreet_ini_shutdown(); efreet_icon_shutdown(); efreet_xml_shutdown(); efreet_base_shutdown(); - efreet_util_shutdown(); IF_FREE(efreet_lang); IF_FREE(efreet_lang_country); |
From: Enlightenment C. <no...@cv...> - 2007-03-25 11:25:26
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Modified Files: efreet.c Log Message: util init/shutdown last/first =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- efreet.c 25 Mar 2007 10:55:45 -0000 1.3 +++ efreet.c 25 Mar 2007 11:25:23 -0000 1.4 @@ -24,8 +24,8 @@ if (!efreet_icon_init()) return --init; if (!efreet_ini_init()) return --init; if (!efreet_desktop_init()) return --init; - if (!efreet_util_init()) return --init; if (!efreet_menu_init()) return --init; + if (!efreet_util_init()) return --init; return init; } @@ -39,8 +39,8 @@ efreet_shutdown(void) { if (--init) return init; - efreet_menu_shutdown(); efreet_util_shutdown(); + efreet_menu_shutdown(); efreet_desktop_shutdown(); efreet_ini_shutdown(); efreet_icon_shutdown(); |
From: Enlightenment C. <no...@cv...> - 2007-03-25 12:48:01
|
Enlightenment CVS committal Author : englebass Project : e17 Module : libs/efreet Dir : e17/libs/efreet/src/lib Modified Files: efreet_utils.c efreet_utils.h Log Message: Add caching for system .desktop files. =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- efreet_utils.c 25 Mar 2007 10:49:04 -0000 1.6 +++ efreet_utils.c 25 Mar 2007 12:47:59 -0000 1.7 @@ -2,15 +2,80 @@ #include "Efreet.h" #include "efreet_private.h" +typedef struct _Efreet_Cache_Fill Efreet_Cache_Fill; +typedef struct _Efreet_Cache_Fill_Dir Efreet_Cache_Fill_Dir; + +struct _Efreet_Cache_Fill +{ + Ecore_List *dirs; + Efreet_Cache_Fill_Dir *current; + DIR *files; +}; + +struct _Efreet_Cache_Fill_Dir +{ + char *path; + char *file_id; +}; + +static int _efreet_util_cache_fill(void *data); +static void _efreet_util_cache_dir_free(void *data); + +static Ecore_Hash *desktop_by_file_id = NULL; +static Ecore_Hash *desktop_by_exec = NULL; +static Ecore_Hash *file_id_by_desktop_path = NULL; + +static Ecore_Idler *idler = NULL; + int efreet_util_init(void) { + Efreet_Cache_Fill *fill; + Ecore_List *dirs; + + desktop_by_file_id = ecore_hash_new(ecore_str_hash, ecore_str_compare); + ecore_hash_set_free_key(desktop_by_file_id, ECORE_FREE_CB(ecore_string_release)); + desktop_by_exec = ecore_hash_new(ecore_str_hash, ecore_str_compare); + file_id_by_desktop_path = ecore_hash_new(ecore_str_hash, ecore_str_compare); + + fill = NEW(Efreet_Cache_Fill, 1); + fill->dirs = ecore_list_new(); + ecore_list_set_free_cb(fill->dirs, _efreet_util_cache_dir_free); + dirs = efreet_default_dirs_get(efreet_data_home_get(), efreet_data_dirs_get(), + "applications"); + if (dirs) + { + Efreet_Cache_Fill_Dir *dir; + char *path; + + while ((path = ecore_list_remove_first(dirs))) + { + dir = NEW(Efreet_Cache_Fill_Dir, 1); + dir->path = path; + ecore_list_append(fill->dirs, dir); + } + ecore_list_destroy(dirs); + ecore_list_goto_first(fill->dirs); + } + idler = ecore_idler_add(_efreet_util_cache_fill, fill); return 1; } void efreet_util_shutdown(void) { + if (idler) + { + Efreet_Cache_Fill *fill; + fill = ecore_idler_del(idler); + IF_FREE_LIST(fill->dirs); + free(fill); + } + idler = NULL; + + IF_FREE_HASH(desktop_by_file_id); + IF_FREE_HASH(desktop_by_exec); + IF_FREE_HASH(file_id_by_desktop_path); } char * @@ -44,10 +109,13 @@ efreet_util_path_to_file_id(const char *path) { size_t len; - char *id, *p; + char *file_id, *p; char *base; if (!path) return NULL; + file_id = ecore_hash_get(file_id_by_desktop_path, path); + if (file_id) return file_id; + base = efreet_util_path_in_default("applications", path); if (!base) return NULL; @@ -63,15 +131,17 @@ return NULL; } - id = strdup(path + len + 1); - p = id; + file_id = strdup(path + len + 1); + p = file_id; while (*p) { if (*p == '/') *p = '-'; p++; } free(base); - return id; + if (file_id) ecore_hash_set(file_id_by_desktop_path, (void *)ecore_string_instance(path), + (void *)ecore_string_instance(file_id)); + return file_id; } Efreet_Desktop * @@ -82,6 +152,9 @@ const char *dir; if (!file_id) return NULL; + desktop = ecore_hash_get(desktop_by_file_id, file_id); + if (desktop) return desktop; + desktop = NULL; dirs = efreet_default_dirs_get(efreet_data_home_get(), efreet_data_dirs_get(), "applications"); @@ -108,5 +181,146 @@ if (desktop) break; } ecore_list_destroy(dirs); + if (desktop) ecore_hash_set(desktop_by_file_id, (void *)ecore_string_instance(file_id), desktop); return desktop; +} + +Efreet_Desktop * +efreet_util_desktop_by_exec_get(const char *exec) +{ + Efreet_Desktop *desktop = NULL; + + if (!exec) return NULL; + desktop = ecore_hash_get(desktop_by_exec, exec); + if (desktop) return desktop; + desktop = NULL; + + /* TODO: Try to search for the .desktop file. But if it isn't in the cache it will be + * timeconsuming.*/ + + if (desktop) ecore_hash_set(desktop_by_exec, (void *)ecore_string_instance(exec), desktop); + return NULL; +} + +#if 0 +static void +dump(void *value, void *data __UNUSED__) +{ + Ecore_Hash_Node *node; + node = value; + printf("%s -> %p\n", (char *)node->key, node->value); +} +#endif + +static int +_efreet_util_cache_fill(void *data) +{ + Efreet_Cache_Fill *fill; + struct dirent *file = NULL; + double start; + char buf[PATH_MAX]; + + fill = data; + if (!fill->dirs) + { + free(fill); + idler = NULL; + return 0; + } + if (!fill->current) + { + fill->current = ecore_list_remove_first(fill->dirs); + if (!fill->current) + { + IF_FREE_LIST(fill->dirs); + free(fill); + idler = NULL; +#if 0 + ecore_hash_for_each_node(desktop_by_file_id, dump, NULL); + ecore_hash_for_each_node(desktop_by_exec, dump, NULL); + ecore_hash_for_each_node(file_id_by_desktop_path, dump, NULL); + printf("%d\n", ecore_hash_count(desktop_by_file_id)); +#endif + return 0; + } + } + + start = ecore_time_get(); + if (!fill->files) fill->files = opendir(fill->current->path); + if (!fill->files) + { + /* Couldn't open this dir, continue to next */ + fill->current = NULL; + } + else + { + while ((ecore_time_get() - start) < 0.01) + { + char file_id[PATH_MAX]; + + file = readdir(fill->files); + if (!file) break; + if (!strcmp(file->d_name, ".") || !strcmp(file->d_name, "..")) continue; + + snprintf(buf, PATH_MAX, "%s/%s", fill->current->path, file->d_name); + if (fill->current->file_id) + snprintf(file_id, PATH_MAX, "%s-%s", fill->current->file_id, file->d_name); + else + strcpy(file_id, file->d_name); + + if (ecore_file_is_dir(buf)) + { + Efreet_Cache_Fill_Dir *dir; + + dir = NEW(Efreet_Cache_Fill_Dir, 1); + dir->path = strdup(buf); + dir->file_id = strdup(file_id); + ecore_list_append(fill->dirs, dir); + } + else + { + Efreet_Desktop *desktop; + char *ext; + char *exec; + + ext = strrchr(buf, '.'); + if (!ext || strcmp(ext, ".desktop")) continue; + desktop = efreet_desktop_get(buf); + + if (!desktop || desktop->type != EFREET_DESKTOP_TYPE_APPLICATION) continue; + ecore_hash_set(desktop_by_file_id, (void *)ecore_string_instance(file_id), desktop); + exec = ecore_file_app_exe_get(desktop->exec); + if (exec) + { + /* TODO: exec can be with and without full path, we should handle that */ + ecore_hash_set(desktop_by_exec, (void *)ecore_string_instance(exec), desktop); + free(exec); + } + ecore_hash_set(file_id_by_desktop_path, + (void *)ecore_string_instance(desktop->orig_path), + (void *)ecore_string_instance(file_id)); + } + } + if (!file) + { + /* This dir has been search through */ + _efreet_util_cache_dir_free(fill->current); + fill->current = NULL; + closedir(fill->files); + fill->files = NULL; + } + } + + return 1; +} + +static void +_efreet_util_cache_dir_free(void *data) +{ + Efreet_Cache_Fill_Dir *dir; + + dir = data; + IF_FREE(dir->path); + IF_FREE(dir->file_id); + free(dir); } =================================================================== RCS file: /cvs/e/e17/libs/efreet/src/lib/efreet_utils.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- efreet_utils.h 25 Mar 2007 10:49:04 -0000 1.4 +++ efreet_utils.h 25 Mar 2007 12:47:59 -0000 1.5 @@ -5,5 +5,6 @@ char *efreet_util_path_in_default(const char *section, const char *path); char *efreet_util_path_to_file_id(const char *path); Efreet_Desktop *efreet_util_desktop_by_file_id_get(const char *file_id); +Efreet_Desktop *efreet_util_desktop_by_exec_get(const char *exec); #endif |