# include <fcntl.h>
#endif
#ifdef HAVE_SIGNAL_H
+#define __USE_UNIX98
# include <signal.h>
#endif
#ifdef HAVE_STDLIB_H
#include <X11/cursorfont.h>
#ifdef USE_SM
+gboolean ob_sm_use = TRUE;
SmcConn ob_sm_conn;
gchar *ob_sm_id = NULL;
#endif
sigemptyset(&sigset);
action.sa_handler = dispatch_signal;
action.sa_mask = sigset;
- action.sa_flags = SA_NOCLDSTOP;
+ action.sa_flags = SA_NOCLDSTOP | SA_NODEFER;
sigaction(SIGUSR1, &action, (struct sigaction *) NULL);
sigaction(SIGPIPE, &action, (struct sigaction *) NULL);
- sigaction(SIGSEGV, &action, (struct sigaction *) NULL);
+/* sigaction(SIGSEGV, &action, (struct sigaction *) NULL);*/
sigaction(SIGFPE, &action, (struct sigaction *) NULL);
sigaction(SIGTERM, &action, (struct sigaction *) NULL);
sigaction(SIGINT, &action, (struct sigaction *) NULL);
mkdir(path, (S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP |
S_IROTH | S_IWOTH | S_IXOTH));
g_free(path);
+
+ g_set_prgname(argv[0]);
/* parse out command line args */
parse_args(argc, argv);
timer_startup();
event_startup();
grab_startup();
+ window_startup();
plugin_startup();
/* load the plugins specified in the pluginrc */
plugin_loadall();
/* set up the kernel config shit */
config_startup();
+ menu_startup();
/* parse/load user options */
if (parse_load_rc(&doc, &node))
parse_tree(doc, node->xmlChildrenNode, NULL);
if (ob_rr_theme == NULL)
exit_with_error("Unable to load a theme.");
- window_startup();
- menu_startup();
frame_startup();
moveresize_startup();
focus_startup();
SmProp *props[7];
gulong hint, pri;
gchar pid[32];
- gint i;
+ gint i, j;
gboolean has_id;
for (i = 1; i < argc - 1; ++i)
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]);
s = e->data.s.signal;
switch (s) {
case SIGUSR1:
- g_message("Caught SIGUSR1 signal. Restarting.");
+ fprintf(stderr, "Caught SIGUSR1 signal. Restarting.");
ob_shutdown = ob_restart = TRUE;
break;
case SIGINT:
case SIGTERM:
case SIGPIPE:
- g_message("Caught signal %d. Exiting.", s);
+ fprintf(stderr, "Caught signal %d. Exiting.", s);
ob_shutdown = TRUE;
break;
case SIGFPE:
case SIGSEGV:
- g_message("Caught signal %d. Aborting and dumping core.", s);
+ fprintf(stderr, "Caught signal %d. Aborting and dumping core.", s);
abort();
}
}
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");
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]);