X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fopenbox.c;h=70b65e40d511eacf060fa4cf851589e62ae8b59c;hb=716477fc4001ce4fcdb92ae07a19801568492b91;hp=10970820123f32c288bfcda205ab91812039b2e2;hpb=7f2550e0ce97957192e6b467a6be9104feca18c2;p=chaz%2Fopenbox diff --git a/openbox/openbox.c b/openbox/openbox.c index 10970820..70b65e40 100644 --- a/openbox/openbox.c +++ b/openbox/openbox.c @@ -49,6 +49,7 @@ #include #ifdef USE_SM +gboolean ob_sm_use = TRUE; SmcConn ob_sm_conn; gchar *ob_sm_id = NULL; #endif @@ -329,7 +330,7 @@ static void sm_startup(int argc, char **argv) SmProp *props[7]; gulong hint, pri; gchar pid[32]; - gint i; + gint i, j; gboolean has_id; for (i = 1; i < argc - 1; ++i) @@ -339,27 +340,29 @@ static void sm_startup(int argc, char **argv) prop_cmd.vals = g_new(SmPropValue, (has_id ? argc-2 : argc)); prop_cmd.num_vals = (has_id ? argc-2 : argc); - for (i = 0; i < argc; ++i) { + for (i = 0, j = 0; i < argc; ++i, ++j) { if (strcmp (argv[i], "-sm-client-id") == 0) { - ++i; /* skip the next as well */ + ++i, --j; /* skip the next as well, keep j where it is */ } else { - prop_cmd.vals[i].value = argv[i]; - prop_cmd.vals[i].length = strlen(argv[i]); + prop_cmd.vals[j].value = argv[i]; + prop_cmd.vals[j].length = strlen(argv[i]); } } prop_res.vals = g_new(SmPropValue, (has_id ? argc : argc+2)); prop_res.num_vals = (has_id ? argc : argc+2); - for (i = 0; i < argc; ++i) { - prop_res.vals[i].value = argv[i]; - prop_res.vals[i].length = strlen(argv[i]); - } - if (!has_id) { - prop_res.vals[i].value = "-sm-client-id"; - prop_res.vals[i++].length = strlen("-sm-client-id"); - prop_res.vals[i].value = ob_sm_id; - prop_res.vals[i++].length = strlen(ob_sm_id); + for (i = 0, j = 0; i < argc; ++i, ++j) { + if (strcmp (argv[i], "-sm-client-id") == 0) { + ++i, --j; /* skip the next as well, keep j where it is */ + } else { + prop_res.vals[j].value = argv[i]; + prop_res.vals[j].length = strlen(argv[i]); + } } + prop_res.vals[j].value = "-sm-client-id"; + prop_res.vals[j++].length = strlen("-sm-client-id"); + prop_res.vals[j].value = ob_sm_id; + prop_res.vals[j++].length = strlen(ob_sm_id); val_prog.value = argv[0]; val_prog.length = strlen(argv[0]); @@ -471,7 +474,8 @@ static void print_help() g_print("Options:\n\n"); g_print(" -rc PATH Specify the path to the rc file to use\n"); #ifdef USE_SM - g_print(" -sm-client-id ID Specify the session manager ID\n"); + g_print(" -sm-client-id ID Specify session management ID\n"); + g_print(" -sm-disable Disable connection to session manager\n"); #endif g_print(" -help Display this help and exit\n"); g_print(" -version Display the version and exit\n"); @@ -504,6 +508,8 @@ static void parse_args(int argc, char **argv) g_printerr(_("-sm-client-id requires an argument\n")); else ob_sm_id = argv[++i]; + } else if (!strcmp(argv[i], "-sm-disable")) { + ob_sm_use = FALSE; #endif } else { g_printerr("Invalid option: '%s'\n\n", argv[i]);