Support for Path in .desktop files (fixes issue #611)

This commit is contained in:
o9000
2016-12-04 17:39:34 +01:00
parent c37d61c862
commit cd76bd311d
5 changed files with 242 additions and 18 deletions

View File

@@ -211,11 +211,11 @@ gboolean read_desktop_file_from_dir(const char *path, const char *file_name, Des
g_free(full_path);
return TRUE;
}
free(entry->name);
free(entry->generic_name);
free(entry->icon);
free(entry->exec);
entry->name = entry->generic_name = entry->icon = entry->exec = NULL;
free_and_null(entry->name);
free_and_null(entry->generic_name);
free_and_null(entry->icon);
free_and_null(entry->exec);
free_and_null(entry->cwd);
GList *subdirs = NULL;
@@ -254,7 +254,7 @@ gboolean read_desktop_file_from_dir(const char *path, const char *file_name, Des
gboolean read_desktop_file(const char *path, DesktopEntry *entry)
{
entry->path = strdup(path);
entry->name = entry->generic_name = entry->icon = entry->exec = NULL;
entry->name = entry->generic_name = entry->icon = entry->exec = entry->cwd = NULL;
if (strchr(path, '/'))
return read_desktop_file_full_path(path, entry);
@@ -267,12 +267,12 @@ gboolean read_desktop_file(const char *path, DesktopEntry *entry)
void free_desktop_entry(DesktopEntry *entry)
{
free(entry->name);
free(entry->generic_name);
free(entry->icon);
free(entry->exec);
free(entry->path);
entry->name = entry->generic_name = entry->icon = entry->exec = entry->path = NULL;
free_and_null(entry->name);
free_and_null(entry->generic_name);
free_and_null(entry->icon);
free_and_null(entry->exec);
free_and_null(entry->path);
free_and_null(entry->cwd);
}
void test_read_desktop_file()

View File

@@ -441,7 +441,8 @@ void launcher_action(LauncherIcon *icon, XEvent *evt)
// Allow children to exist after parent destruction
setsid();
// Run the command
chdir(icon->cwd);
if (icon->cwd)
chdir(icon->cwd);
execl("/bin/sh", "/bin/sh", "-c", icon->cmd, NULL);
fprintf(stderr, "Failed to execlp %s\n", icon->cmd);
#if HAVE_SN
@@ -510,11 +511,10 @@ void launcher_reload_icon(Launcher *launcher, LauncherIcon *launcherIcon)
launcherIcon->cmd = strdup(entry.exec);
if (launcherIcon->cwd)
free(launcherIcon->cwd);
if (entry.cwd) {
if (entry.cwd)
launcherIcon->cwd = strdup(entry.cwd);
} else {
launcherIcon->cwd = get_current_dir_name();
}
else
launcherIcon->cwd = NULL;
if (launcherIcon->icon_name)
free(launcherIcon->icon_name);
launcherIcon->icon_name = entry.icon ? strdup(entry.icon) : strdup(DEFAULT_ICON);