Somewhat streamline event loop/restart/quit handling; most notable

change allows a restart to trigger proper teardown first, even though
teardown is not (yet) complete.

After some discussion with oga@nicotinebsd.org regarding a more
complicated version/idea.
This commit is contained in:
okan
2014-01-22 21:48:27 +00:00
parent ac3162439a
commit 77aa5ac45b
5 changed files with 31 additions and 28 deletions

View File

@@ -47,10 +47,12 @@ struct client_ctx_q Clientq = TAILQ_HEAD_INITIALIZER(Clientq);
int HasRandr, Randr_ev;
struct conf Conf;
const char *homedir;
volatile sig_atomic_t cwm_status;
static void sigchld_cb(int);
static int x_errorhandler(Display *, XErrorEvent *);
static void x_init(const char *);
static void x_restart(void);
static void x_teardown(void);
static int x_wmerrorhandler(Display *, XErrorEvent *);
@@ -111,8 +113,12 @@ main(int argc, char **argv)
free(conf_path);
x_init(display_name);
xev_loop();
cwm_status = CWM_RUNNING;
while (cwm_status == CWM_RUNNING)
xev_process();
x_teardown();
if (cwm_status == CWM_RESTART)
x_restart();
return (0);
}
@@ -140,6 +146,13 @@ x_init(const char *dpyname)
screen_init(i);
}
static void
x_restart(void)
{
(void)setsid();
(void)execvp(cwm_argv[0], cwm_argv);
}
static void
x_teardown(void)
{