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)
|
void action_restart(union ActionData *data)
|
||||||
{
|
{
|
||||||
ob_restart_path = g_strdup(data->execute.path);
|
ob_restart_other(data->execute.path);
|
||||||
ob_shutdown = ob_restart = TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void action_exit(union ActionData *data)
|
void action_exit(union ActionData *data)
|
||||||
{
|
{
|
||||||
ob_shutdown = TRUE;
|
ob_exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
void action_showmenu(union ActionData *data)
|
void action_showmenu(union ActionData *data)
|
||||||
|
|
|
@ -149,28 +149,7 @@ void event_loop()
|
||||||
struct timeval *wait;
|
struct timeval *wait;
|
||||||
gboolean had_event = FALSE;
|
gboolean had_event = FALSE;
|
||||||
|
|
||||||
while (TRUE) {
|
while (XPending(ob_display)) {
|
||||||
/*
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
XNextEvent(ob_display, &e);
|
XNextEvent(ob_display, &e);
|
||||||
|
|
||||||
#ifdef USE_LIBSN
|
#ifdef USE_LIBSN
|
||||||
|
|
|
@ -52,23 +52,23 @@
|
||||||
#ifdef USE_SM
|
#ifdef USE_SM
|
||||||
gboolean ob_sm_use = TRUE;
|
gboolean ob_sm_use = TRUE;
|
||||||
SmcConn ob_sm_conn;
|
SmcConn ob_sm_conn;
|
||||||
gchar *ob_sm_id = NULL;
|
gchar *ob_sm_id;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
RrInstance *ob_rr_inst = NULL;
|
RrInstance *ob_rr_inst;
|
||||||
RrTheme *ob_rr_theme = NULL;
|
RrTheme *ob_rr_theme;
|
||||||
Display *ob_display = NULL;
|
Display *ob_display;
|
||||||
int ob_screen;
|
int ob_screen;
|
||||||
Window ob_root;
|
Window ob_root;
|
||||||
ObState ob_state;
|
ObState ob_state;
|
||||||
gboolean ob_shutdown = FALSE;
|
gboolean ob_sync;
|
||||||
gboolean ob_restart = FALSE;
|
|
||||||
char *ob_restart_path = NULL;
|
|
||||||
gboolean ob_remote = TRUE;
|
|
||||||
gboolean ob_sync = FALSE;
|
|
||||||
Cursor ob_cursors[OB_NUM_CURSORS];
|
Cursor ob_cursors[OB_NUM_CURSORS];
|
||||||
KeyCode ob_keys[OB_NUM_KEYS];
|
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 signal_handler(const ObEvent *e, void *data);
|
||||||
static void parse_args(int argc, char **argv);
|
static void parse_args(int argc, char **argv);
|
||||||
|
@ -260,7 +260,7 @@ int main(int argc, char **argv)
|
||||||
client_manage_all();
|
client_manage_all();
|
||||||
|
|
||||||
ob_state = OB_STATE_RUNNING;
|
ob_state = OB_STATE_RUNNING;
|
||||||
while (!ob_shutdown)
|
while (!shutdown)
|
||||||
event_loop();
|
event_loop();
|
||||||
ob_state = OB_STATE_EXITING;
|
ob_state = OB_STATE_EXITING;
|
||||||
|
|
||||||
|
@ -292,18 +292,18 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
XCloseDisplay(ob_display);
|
XCloseDisplay(ob_display);
|
||||||
|
|
||||||
if (ob_restart) {
|
if (restart) {
|
||||||
if (ob_restart_path != NULL) {
|
if (restart_path != NULL) {
|
||||||
int argcp;
|
int argcp;
|
||||||
char **argvp;
|
char **argvp;
|
||||||
GError *err = NULL;
|
GError *err = NULL;
|
||||||
|
|
||||||
/* run other shit */
|
/* 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);
|
execvp(argvp[0], argvp);
|
||||||
g_strfreev(argvp);
|
g_strfreev(argvp);
|
||||||
} else {
|
} else {
|
||||||
g_warning("failed to execute '%s': %s", ob_restart_path,
|
g_warning("failed to execute '%s': %s", restart_path,
|
||||||
err->message);
|
err->message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -473,7 +473,7 @@ static void signal_handler(const ObEvent *e, void *data)
|
||||||
switch (s) {
|
switch (s) {
|
||||||
case SIGUSR1:
|
case SIGUSR1:
|
||||||
fprintf(stderr, "Caught SIGUSR1 signal. Restarting.");
|
fprintf(stderr, "Caught SIGUSR1 signal. Restarting.");
|
||||||
ob_shutdown = ob_restart = TRUE;
|
ob_restart();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SIGHUP:
|
case SIGHUP:
|
||||||
|
@ -481,7 +481,7 @@ static void signal_handler(const ObEvent *e, void *data)
|
||||||
case SIGTERM:
|
case SIGTERM:
|
||||||
case SIGPIPE:
|
case SIGPIPE:
|
||||||
fprintf(stderr, "Caught signal %d. Exiting.", s);
|
fprintf(stderr, "Caught signal %d. Exiting.", s);
|
||||||
ob_shutdown = TRUE;
|
ob_exit();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SIGFPE:
|
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)
|
static void sm_die(SmcConn conn, SmPointer data)
|
||||||
{
|
{
|
||||||
ob_shutdown = TRUE;
|
ob_exit();
|
||||||
g_message("got DIE from session manager");
|
g_message("got DIE from session manager");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -592,6 +592,23 @@ static void exit_with_error(gchar *msg)
|
||||||
exit(EXIT_FAILURE);
|
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)
|
Cursor ob_cursor(ObCursor cursor)
|
||||||
{
|
{
|
||||||
g_assert(cursor < OB_NUM_CURSORS);
|
g_assert(cursor < OB_NUM_CURSORS);
|
||||||
|
|
|
@ -32,14 +32,6 @@ extern Window ob_root;
|
||||||
/* The state of execution of the window manager */
|
/* The state of execution of the window manager */
|
||||||
extern ObState ob_state;
|
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 */
|
/*! Runtime option to specify running on a remote display */
|
||||||
extern gboolean ob_remote;
|
extern gboolean ob_remote;
|
||||||
/*! Runtime option to run in synchronous mode */
|
/*! 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. */
|
/*! The path of the rc file. If NULL the default paths are searched for one. */
|
||||||
extern char *ob_rc_path;
|
extern char *ob_rc_path;
|
||||||
|
|
||||||
|
void ob_restart_other(const gchar *path);
|
||||||
|
void ob_restart();
|
||||||
|
void ob_exit();
|
||||||
|
|
||||||
Cursor ob_cursor(ObCursor cursor);
|
Cursor ob_cursor(ObCursor cursor);
|
||||||
|
|
||||||
KeyCode ob_keycode(ObKey key);
|
KeyCode ob_keycode(ObKey key);
|
||||||
|
|
Loading…
Reference in a new issue