all repos — openbox @ f746a4975b1ab7559da3d9db51af14e1c084bc13

openbox fork - make it a bit more like ryudo

use setenv to set up the DESKTOP_STARTUP_ID when launching programs.

before, if DESKTOP_STARTUP_ID was set in openbox, it would mess up adding it to the child's environment because it would appear twice. so now it will only appear once for the child always.
Dana Jansens danakj@orodu.net
commit

f746a4975b1ab7559da3d9db51af14e1c084bc13

parent

3ad050f7d8050a46ad03f8233f1c61ad40be9551

3 files changed, 21 insertions(+), 28 deletions(-)

jump to
M openbox/action.copenbox/action.c

@@ -1103,17 +1103,18 @@ g_warning("failed to execute '%s': %s",

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",

@@ -1121,7 +1122,6 @@ cmd, e->message);

g_error_free(e); sn_spawn_cancel(); } - g_strfreev(env); g_free(program); g_strfreev(argv); } else {
M openbox/startupnotify.copenbox/startupnotify.c

@@ -20,7 +20,7 @@

#include "startupnotify.h" #include "gettext.h" -extern gchar **environ; +#include <stdlib.h> #ifndef USE_LIBSN

@@ -32,8 +32,8 @@ {

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); }

@@ -226,12 +226,11 @@ sn_launcher_context_complete(sn);

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);

@@ -256,15 +255,9 @@ ob_main_loop_timeout_add(ob_main_loop, 30 * G_USEC_PER_SEC,

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()
M openbox/startupnotify.hopenbox/startupnotify.h

@@ -35,9 +35,9 @@ was requested */

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