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.c ecore_desktop_menu.c Log Message: Separate the exe from its parameters. =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/Ecore_Desktop.h,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- Ecore_Desktop.h 5 Sep 2006 17:54:20 -0000 1.22 +++ Ecore_Desktop.h 7 Sep 2006 08:51:47 -0000 1.23 @@ -45,6 +45,7 @@ char *type; char *categories; char *exec; + char *exec_params; char *icon; char *icon_class; char *icon_path; @@ -149,6 +150,8 @@ Ecore_Hash *ecore_desktop_ini_get(const char *file); Ecore_Desktop *ecore_desktop_get(const char *file, const char *lang); void ecore_desktop_save(Ecore_Desktop * desktop); + EAPI char * ecore_desktop_get_command(Ecore_Desktop *desktop, Ecore_List *files, int fill); + EAPI char * ecore_desktop_merge_command(char *exec, char *params); void ecore_desktop_destroy(Ecore_Desktop * desktop); =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/ecore_desktop.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -3 -r1.26 -r1.27 --- ecore_desktop.c 4 Sep 2006 15:20:27 -0000 1.26 +++ ecore_desktop.c 7 Sep 2006 08:51:47 -0000 1.27 @@ -246,8 +246,17 @@ result->exec = (char *)ecore_hash_get(result->group, "Exec"); -// FIXME: Handle the fdo %x replacable params. Some should be stripped, some should be expanded. - exe = result->exec; + if (result->exec) + { + exe = strchr(result->exec, ' '); + if (exe) + { + *exe = '\0'; + result->exec_params = ++exe; + } + exe = result->exec; + } + value = (char *)ecore_hash_get(result->group, "StartupWMClass"); @@ -469,6 +478,8 @@ void ecore_desktop_save(Ecore_Desktop * desktop) { + char *temp; + if (!desktop->group) { desktop->group = ecore_hash_new(ecore_str_hash, ecore_str_compare); @@ -495,13 +506,15 @@ } } + temp = ecore_desktop_get_command(desktop, NULL, 0); + if (temp) + ecore_hash_set(desktop->group, strdup("Exec"), temp); if (desktop->name) ecore_hash_set(desktop->group, strdup("Name"), strdup(desktop->name)); if (desktop->generic) ecore_hash_set(desktop->group, strdup("GenericName"), strdup(desktop->generic)); if (desktop->comment) ecore_hash_set(desktop->group, strdup("Comment"), strdup(desktop->comment)); if (desktop->type) ecore_hash_set(desktop->group, strdup("Type"), strdup(desktop->type)); if (desktop->URL) ecore_hash_set(desktop->group, strdup("URL"), strdup(desktop->URL)); if (desktop->file) ecore_hash_set(desktop->group, strdup("File"), strdup(desktop->file)); - if (desktop->exec) ecore_hash_set(desktop->group, strdup("Exec"), strdup(desktop->exec)); if (desktop->icon) ecore_hash_set(desktop->group, strdup("Icon"), strdup(desktop->icon)); if (desktop->icon_class) ecore_hash_set(desktop->group, strdup("X-Enlightenment-IconClass"), strdup(desktop->icon_class)); if (desktop->icon_path) ecore_hash_set(desktop->group, strdup("X-Enlightenment-IconPath"), strdup(desktop->icon_path)); @@ -686,3 +699,54 @@ return strdup(home); } +EAPI char * +ecore_desktop_get_command(Ecore_Desktop *desktop, Ecore_List *files, int fill) +{ + char *result = NULL, *params = NULL; + + if (fill && (desktop->exec_params)) + { + /* FIXME: Handle the fdo %x replacable params. Some should be stripped, some should be expanded. */ + params = strdup(desktop->exec_params); + } + else if (desktop->exec_params) + params = strdup(desktop->exec_params); + + result = ecore_desktop_merge_command(desktop->exec, params); + + if (params) + free(params); + return result; +} + + +EAPI char * +ecore_desktop_merge_command(char *exec, char *params) +{ + int size; + char *end, *result = NULL; + + if ((exec) && (params)) + { + size = strlen(exec); + end = exec + size; + /* Two possibilities, it was just split at the space, or it was setup seperatly. */ + if (params == (end + 1)) + { + *end = ' '; + result = strdup(exec); + *end = '\0'; + } + else + { + size += strlen(params) + 2; + result = malloc(size); + if (result) + sprintf(result, "%s %s", exec, params); + } + } + else if (exec) + result = strdup(exec); + + return result; +} =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore_desktop/ecore_desktop_menu.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -3 -r1.16 -r1.17 --- ecore_desktop_menu.c 6 Sep 2006 05:22:32 -0000 1.16 +++ ecore_desktop_menu.c 7 Sep 2006 08:51:47 -0000 1.17 @@ -133,24 +133,16 @@ if (menu_file) { -// char *path; - -// path = ecore_file_get_dir(menu_file); -// if (path) - { - Ecore_Desktop_Tree *menus; + 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); + /* 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); - +// ecore_desktop_tree_del(menus); } free(menu_file); } ------------------------------------------------------------------------- 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