Merge branch 'launcher-path' into 'master'

Add support for Path in .desktop files

This attempts to solve Issue #611 I filed earlier this evening.

I've added support for the Path key in .desktop files for the launcher.   I'm happy to make any changes to make things cleaner, since I'm admittedly not a guru.

See merge request !20
This commit is contained in:
o9000 2016-12-04 16:29:21 +00:00
commit c37d61c862
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;