From 48a7c32512db4358dc7c2928174bccc203d30e69 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sat, 3 Mar 2007 03:42:28 +0000 Subject: [PATCH] make a copy of the argc and argv instead of modifying the real ones this means that when openbox is restared it doesn't lose it's SM related command line args, they get passed to the new openbox same as they were passed to the one exiting. --- openbox/session.c | 20 +++++++++++++------- openbox/session.h | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/openbox/session.c b/openbox/session.c index 54ce34ed..fa9ce484 100644 --- a/openbox/session.c +++ b/openbox/session.c @@ -25,7 +25,7 @@ GList *session_saved_state; -void session_startup(gint *argc, gchar ***argv) {} +void session_startup(gint argc, gchar **argv) {} void session_shutdown() {} GList* session_state_find(ObClient *c) { return NULL; } gboolean session_state_cmp(ObSessionState *s, ObClient *c) { return FALSE; } @@ -142,17 +142,25 @@ static void parse_args(gint *argc, gchar ***argv) } } -void session_startup(gint *argc, gchar ***argv) +void session_startup(gint argc, gchar **argv) { #define SM_ERR_LEN 1024 SmcCallbacks cb; gchar sm_err[SM_ERR_LEN]; + gint i; + + sm_argc = argc; + sm_argv = g_new(gchar*, argc); + for (i = 0; i < argc; ++i) + sm_argv[i] = argv[i]; - parse_args(argc, argv); + parse_args(&sm_argc, &sm_argv); - if (sm_disable) + if (sm_disable) { + g_free(sm_argv); return; + } sm_sessions_path = g_build_filename(parse_xdg_data_home_path(), "openbox", "sessions", NULL); @@ -174,9 +182,6 @@ void session_startup(gint *argc, gchar ***argv) g_free(filename); } - sm_argc = *argc; - sm_argv = *argv; - cb.save_yourself.callback = sm_save_yourself; cb.save_yourself.client_data = NULL; @@ -257,6 +262,7 @@ void session_shutdown() g_free(sm_sessions_path); g_free(save_file); g_free(sm_id); + g_free(sm_argv); if (sm_conn) { SmPropValue val_hint; diff --git a/openbox/session.h b/openbox/session.h index 680f45f0..c3146337 100644 --- a/openbox/session.h +++ b/openbox/session.h @@ -38,7 +38,7 @@ struct _ObSessionState { extern GList *session_saved_state; -void session_startup(gint *argc, gchar ***argv); +void session_startup(gint argc, gchar **argv); void session_shutdown(); GList* session_state_find(struct _ObClient *c); -- 2.44.0