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:
commit
c37d61c862
4 changed files with 13 additions and 1 deletions
|
@ -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) {
|
||||
|
|
|
@ -15,6 +15,7 @@ typedef struct DesktopEntry {
|
|||
char *exec;
|
||||
char *icon;
|
||||
char *path;
|
||||
char *cwd;
|
||||
gboolean hidden_from_menus;
|
||||
} DesktopEntry;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue