Add support for Path in .desktop files

This commit is contained in:
Mike Messmore 2016-11-30 21:21:18 -06:00
parent 48078ffb25
commit d21507cd4b
4 changed files with 13 additions and 1 deletions

View file

@ -110,7 +110,7 @@ void expand_exec(DesktopEntry *entry, const char *path)
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 @@ gboolean read_desktop_file_full_path(const char *path, DesktopEntry *entry)
}
} 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) {

View file

@ -15,6 +15,7 @@ typedef struct DesktopEntry {
char *exec;
char *icon;
char *path;
char *cwd;
gboolean hidden_from_menus;
} DesktopEntry;

View file

@ -441,6 +441,7 @@ void launcher_action(LauncherIcon *icon, XEvent *evt)
// 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 @@ void launcher_reload_icon(Launcher *launcher, LauncherIcon *launcherIcon)
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);

View file

@ -28,6 +28,7 @@ typedef struct LauncherIcon {
Imlib_Image image_hover;
Imlib_Image image_pressed;
char *cmd;
char *cwd;
char *icon_name;
char *icon_path;
char *icon_tooltip;