Separate the exe from its parameters.

SVN revision: 25574
This commit is contained in:
David Walter Seikel 2006-09-07 08:51:47 +00:00
parent 0c6a8ed5dc
commit f2e571e88e
3 changed files with 78 additions and 19 deletions

View File

@ -45,6 +45,7 @@ struct _Ecore_Desktop
char *type;
char *categories;
char *exec;
char *exec_params;
char *icon;
char *icon_class;
char *icon_path;
@ -149,6 +150,8 @@ extern "C"
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);

View File

@ -246,8 +246,17 @@ ecore_desktop_get(const char *file, const char *lang)
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 @@ ecore_desktop_get(const char *file, const char *lang)
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 @@ ecore_desktop_save(Ecore_Desktop * desktop)
}
}
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 @@ ecore_desktop_home_get()
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;
}

View File

@ -133,24 +133,16 @@ ecore_desktop_menu_for_each(void (*func)(char *name, char *path, Ecore_Hash *app
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);
}