Add support for Path in .desktop files
Mike Messmore mike@messmore.org
4 files changed,
13 insertions(+),
1 deletions(-)
M
src/launcher/apps-common.c
→
src/launcher/apps-common.c
@@ -110,7 +110,7 @@ }
gboolean read_desktop_file_full_path(const char *path, DesktopEntry *entry) { - entry->name = entry->generic_name = entry->icon = entry->exec = NULL; + entry->name = entry->generic_name = entry->icon = entry->exec = entry->cwd = NULL; entry->hidden_from_menus = FALSE; FILE *fp = fopen(path, "rt");@@ -185,6 +185,8 @@ }
} } else if (!entry->exec && strcmp(key, "Exec") == 0) { entry->exec = strdup(value); + } else if (!entry->cwd && strcmp(key, "Path") == 0) { + entry->cwd = strdup(value); } else if (!entry->icon && strcmp(key, "Icon") == 0) { entry->icon = strdup(value); } else if (strcmp(key, "NoDisplay") == 0) {
M
src/launcher/apps-common.h
→
src/launcher/apps-common.h
@@ -15,6 +15,7 @@ char *generic_name;
char *exec; char *icon; char *path; + char *cwd; gboolean hidden_from_menus; } DesktopEntry;
M
src/launcher/launcher.c
→
src/launcher/launcher.c
@@ -441,6 +441,7 @@ #endif // HAVE_SN
// Allow children to exist after parent destruction setsid(); // Run the command + chdir(icon->cwd); execl("/bin/sh", "/bin/sh", "-c", icon->cmd, NULL); fprintf(stderr, "Failed to execlp %s\n", icon->cmd); #if HAVE_SN@@ -507,6 +508,13 @@ schedule_redraw(&launcherIcon->area);
if (launcherIcon->cmd) free(launcherIcon->cmd); launcherIcon->cmd = strdup(entry.exec); + if (launcherIcon->cwd) + free(launcherIcon->cwd); + if (entry.cwd) { + launcherIcon->cwd = strdup(entry.cwd); + } else { + launcherIcon->cwd = get_current_dir_name(); + } if (launcherIcon->icon_name) free(launcherIcon->icon_name); launcherIcon->icon_name = entry.icon ? strdup(entry.icon) : strdup(DEFAULT_ICON);
M
src/launcher/launcher.h
→
src/launcher/launcher.h
@@ -28,6 +28,7 @@ Imlib_Image image;
Imlib_Image image_hover; Imlib_Image image_pressed; char *cmd; + char *cwd; char *icon_name; char *icon_path; char *icon_tooltip;