X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fopenbox.c;h=943e624e7dac94f23474fa0885e410c48732494c;hb=6c39d26803e86453227c0a23d0bb3b1be5b77492;hp=8f19b31aa02f648a2f8f1a1b7b32bf8c32c1411b;hpb=276b2be581c6cb138b439537761ff2ca42201805;p=chaz%2Fopenbox diff --git a/openbox/openbox.c b/openbox/openbox.c index 8f19b31a..943e624e 100644 --- a/openbox/openbox.c +++ b/openbox/openbox.c @@ -52,23 +52,22 @@ #ifdef USE_SM gboolean ob_sm_use = TRUE; SmcConn ob_sm_conn; -gchar *ob_sm_id = NULL; +gchar *ob_sm_id; #endif -RrInstance *ob_rr_inst = NULL; -RrTheme *ob_rr_theme = NULL; -Display *ob_display = NULL; +RrInstance *ob_rr_inst; +RrTheme *ob_rr_theme; +Display *ob_display; int ob_screen; Window ob_root; ObState ob_state; -gboolean ob_shutdown = FALSE; -gboolean ob_restart = FALSE; -char *ob_restart_path = NULL; -gboolean ob_remote = TRUE; -gboolean ob_sync = FALSE; +gboolean ob_sync; Cursor ob_cursors[OB_NUM_CURSORS]; KeyCode ob_keys[OB_NUM_KEYS]; -char *ob_rc_path = NULL; + +static gboolean shutdown; +static gboolean restart; +static char *restart_path; static void signal_handler(const ObEvent *e, void *data); static void parse_args(int argc, char **argv); @@ -260,7 +259,7 @@ int main(int argc, char **argv) client_manage_all(); ob_state = OB_STATE_RUNNING; - while (!ob_shutdown) + while (!shutdown) event_loop(); ob_state = OB_STATE_EXITING; @@ -292,18 +291,18 @@ int main(int argc, char **argv) XCloseDisplay(ob_display); - if (ob_restart) { - if (ob_restart_path != NULL) { + if (restart) { + if (restart_path != NULL) { int argcp; char **argvp; GError *err = NULL; /* run other shit */ - if (g_shell_parse_argv(ob_restart_path, &argcp, &argvp, &err)) { + if (g_shell_parse_argv(restart_path, &argcp, &argvp, &err)) { execvp(argvp[0], argvp); g_strfreev(argvp); } else { - g_warning("failed to execute '%s': %s", ob_restart_path, + g_warning("failed to execute '%s': %s", restart_path, err->message); } } @@ -473,7 +472,7 @@ static void signal_handler(const ObEvent *e, void *data) switch (s) { case SIGUSR1: fprintf(stderr, "Caught SIGUSR1 signal. Restarting."); - ob_shutdown = ob_restart = TRUE; + ob_restart(); break; case SIGHUP: @@ -481,7 +480,7 @@ static void signal_handler(const ObEvent *e, void *data) case SIGTERM: case SIGPIPE: fprintf(stderr, "Caught signal %d. Exiting.", s); - ob_shutdown = TRUE; + ob_exit(); break; case SIGFPE: @@ -504,7 +503,6 @@ static void print_help() print_version(); g_print("Syntax: openbox [options]\n\n"); 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 session management ID\n"); g_print(" --sm-disable Disable connection to session manager\n"); @@ -529,11 +527,6 @@ static void parse_args(int argc, char **argv) exit(0); } else if (!strcmp(argv[i], "--sync")) { ob_sync = TRUE; - } else if (!strcmp(argv[i], "--rc")) { - if (i == argc - 1) /* no args left */ - g_printerr(_("--rc requires an argument\n")); - else - ob_rc_path = argv[++i]; #ifdef USE_SM } else if (!strcmp(argv[i], "--sm-client-id")) { if (i == argc - 1) /* no args left */ @@ -570,7 +563,7 @@ static void sm_save_yourself(SmcConn conn, SmPointer data, int save_type, static void sm_die(SmcConn conn, SmPointer data) { - ob_shutdown = TRUE; + ob_exit(); g_message("got DIE from session manager"); } @@ -592,6 +585,23 @@ static void exit_with_error(gchar *msg) exit(EXIT_FAILURE); } +void ob_restart_other(const gchar *path) +{ + restart_path = g_strdup(path); + ob_restart(); +} + +void ob_restart() +{ + restart = TRUE; + ob_exit(); +} + +void ob_exit() +{ + shutdown = TRUE; +} + Cursor ob_cursor(ObCursor cursor) { g_assert(cursor < OB_NUM_CURSORS);