cmd, e->message);
g_error_free(e);
} else if (data->execute.startupnotify) {
- gchar **env, *program;
+ gchar *program;
program = g_path_get_basename(argv[0]);
- env = sn_get_spawn_environment(program,
- data->execute.name,
- data->execute.icon_name,
- /* launch it on the current
- desktop */
- screen_desktop,
- data->execute.any.time);
- if (!g_spawn_async(NULL, argv, env, G_SPAWN_SEARCH_PATH |
+ /* sets up the environment */
+ sn_setup_spawn_environment(program,
+ data->execute.name,
+ data->execute.icon_name,
+ /* launch it on the current
+ desktop */
+ screen_desktop,
+ data->execute.any.time);
+ if (!g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH |
G_SPAWN_DO_NOT_REAP_CHILD,
NULL, NULL, NULL, &e)) {
g_warning("failed to execute '%s': %s",
g_error_free(e);
sn_spawn_cancel();
}
- g_strfreev(env);
g_free(program);
g_strfreev(argv);
} else {
#include "startupnotify.h"
#include "gettext.h"
-extern gchar **environ;
+#include <stdlib.h>
#ifndef USE_LIBSN
return CurrentTime;
}
gboolean sn_get_desktop(gchar *id, guint *desktop) { return FALSE; }
-gchar **sn_get_spawn_environment(char *program, char *name,
- char *icon_name, gint desktop, Time time)
+void sn_setup_spawn_environment(gchar *program, gchar *name,
+ gchar *icon_name, gint desktop, Time time)
{
return g_strdupv(environ);
}
return FALSE; /* don't repeat */
}
-gchar **sn_get_spawn_environment(char *program, char *name,
- char *icon_name, gint desktop,
- Time time)
+void sn_setup_spawn_environment(gchar *program, gchar *name,
+ gchar *icon_name, gint desktop,
+ Time time)
{
- gchar **env, *desc;
- guint len;
+ gchar *desc;
const char *id;
desc = g_strdup_printf(_("Running %s\n"), program);
sn_launch_wait_timeout, sn_launcher,
(GDestroyNotify)sn_launcher_context_unref);
- env = g_strdupv(environ);
- len = g_strv_length(env); /* includes last null */
- env = g_renew(gchar*, env, ++len); /* add one spot */
- env[len-2] = g_strdup_printf("DESKTOP_STARTUP_ID=%s", id);
- env[len-1] = NULL;
+ setenv("DESKTOP_STARTUP_ID", id, TRUE);
g_free(desc);
-
- return env;
}
void sn_spawn_cancel()
gboolean sn_get_desktop(gchar *id, guint *desktop);
/* Get the environment to run the program in, with startup notification */
-gchar **sn_get_spawn_environment(char *program, char *name,
- char *icon_name, gint desktop,
- Time time);
+void sn_setup_spawn_environment(gchar *program, gchar *name,
+ gchar *icon_name, gint desktop,
+ Time time);
/* Tell startup notification we're not actually running the program we
told it we were