From: Dana Jansens Date: Sat, 3 Mar 2007 03:42:28 +0000 (+0000) Subject: make a copy of the argc and argv instead of modifying the real ones X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=48a7c32512db4358dc7c2928174bccc203d30e69;p=chaz%2Fopenbox 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. --- 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);