make the ob_restart/shutdown stuff static vars and expose them only through functions ob_restart_other(), ob_restart() and ob_exit()
This commit is contained in:
parent
452f3f8aae
commit
eea43e6488
4 changed files with 42 additions and 51 deletions
|
@ -1121,13 +1121,12 @@ void action_moveresize(union ActionData *data)
|
|||
|
||||
void action_restart(union ActionData *data)
|
||||
{
|
||||
ob_restart_path = g_strdup(data->execute.path);
|
||||
ob_shutdown = ob_restart = TRUE;
|
||||
ob_restart_other(data->execute.path);
|
||||
}
|
||||
|
||||
void action_exit(union ActionData *data)
|
||||
{
|
||||
ob_shutdown = TRUE;
|
||||
ob_exit();
|
||||
}
|
||||
|
||||
void action_showmenu(union ActionData *data)
|
||||
|
|
|
@ -149,28 +149,7 @@ void event_loop()
|
|||
struct timeval *wait;
|
||||
gboolean had_event = FALSE;
|
||||
|
||||
while (TRUE) {
|
||||
/*
|
||||
There are slightly different event retrieval semantics here for
|
||||
local (or high bandwidth) versus remote (or low bandwidth)
|
||||
connections to the display/Xserver.
|
||||
*/
|
||||
if (ob_remote) {
|
||||
if (!XPending(ob_display))
|
||||
break;
|
||||
} else {
|
||||
/*
|
||||
This XSync allows for far more compression of events, which
|
||||
makes things like Motion events perform far far better. Since
|
||||
it also means network traffic for every event instead of every
|
||||
X events (where X is the number retrieved at a time), it
|
||||
probably should not be used for setups where Openbox is
|
||||
running on a remote/low bandwidth display/Xserver.
|
||||
*/
|
||||
XSync(ob_display, FALSE);
|
||||
if (!XEventsQueued(ob_display, QueuedAlready))
|
||||
break;
|
||||
}
|
||||
while (XPending(ob_display)) {
|
||||
XNextEvent(ob_display, &e);
|
||||
|
||||
#ifdef USE_LIBSN
|
||||
|
|
|
@ -52,23 +52,23 @@
|
|||
#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;
|
||||
char *ob_rc_path;
|
||||
|
||||
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 +260,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 +292,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 +473,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 +481,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:
|
||||
|
@ -570,7 +570,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 +592,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);
|
||||
|
|
|
@ -32,14 +32,6 @@ extern Window ob_root;
|
|||
/* The state of execution of the window manager */
|
||||
extern ObState ob_state;
|
||||
|
||||
/*! When set to true, Openbox will exit */
|
||||
extern gboolean ob_shutdown;
|
||||
/*! When set to true, Openbox will restart instead of shutting down */
|
||||
extern gboolean ob_restart;
|
||||
/*! When restarting, if this is not NULL, it will be executed instead of
|
||||
restarting Openbox. */
|
||||
extern char *ob_restart_path;
|
||||
|
||||
/*! Runtime option to specify running on a remote display */
|
||||
extern gboolean ob_remote;
|
||||
/*! Runtime option to run in synchronous mode */
|
||||
|
@ -48,6 +40,10 @@ extern gboolean ob_sync;
|
|||
/*! The path of the rc file. If NULL the default paths are searched for one. */
|
||||
extern char *ob_rc_path;
|
||||
|
||||
void ob_restart_other(const gchar *path);
|
||||
void ob_restart();
|
||||
void ob_exit();
|
||||
|
||||
Cursor ob_cursor(ObCursor cursor);
|
||||
|
||||
KeyCode ob_keycode(ObKey key);
|
||||
|
|
Loading…
Reference in a new issue