summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@gnugeneration.com>2017-02-22 09:20:28 -0800
committerVito Caputo <vcaputo@gnugeneration.com>2017-02-22 09:20:28 -0800
commit04d82b8968b6f5eea263dd6ab8302fff059cad9e (patch)
treef75524ee9fedb77aa8381288b65f3dcc716f5903 /src
parent5b50e2a3affddb5693b91846b6c621590b8d21b2 (diff)
vwm: use vwm.done to signal quit
This moves the console teardown back to vwm.c, trivial cleanup.
Diffstat (limited to 'src')
-rw-r--r--src/key.c7
-rw-r--r--src/vwm.c7
-rw-r--r--src/vwm.h1
3 files changed, 8 insertions, 7 deletions
diff --git a/src/key.c b/src/key.c
index 47a2c8d..8827e15 100644
--- a/src/key.c
+++ b/src/key.c
@@ -97,7 +97,6 @@ void vwm_key_pressed(vwm_t *vwm, Window win, XKeyPressedEvent *keypress)
static typeof(keypress->state) last_state;
static int repeat_cnt = 0;
int do_grab = 0;
- char *quit_console_args[] = {"/bin/sh", "-c", "screen -dr " CONSOLE_SESSION_STRING " -X quit", NULL};
sym = XLookupKeysym(keypress, 0);
@@ -174,10 +173,8 @@ void vwm_key_pressed(vwm_t *vwm, Window win, XKeyPressedEvent *keypress)
case XK_Escape: /* leave VWM rudely, after triple press */
do_grab = 1;
- if (repeat_cnt == 2) {
- vwm_launch(vwm, quit_console_args, VWM_LAUNCH_MODE_FG);
- exit(42);
- }
+ if (repeat_cnt == 2)
+ vwm->done = 1;
break;
case XK_v: /* instantiate (and focus) a new (potentially empty, unless migrating) virtual desktop */
diff --git a/src/vwm.c b/src/vwm.c
index c2e5126..d0dc47e 100644
--- a/src/vwm.c
+++ b/src/vwm.c
@@ -69,11 +69,11 @@ static int errhandler(Display *display, XErrorEvent *err)
int main(int argc, char *argv[])
{
int err = 0;
- int done = 0;
XEvent event;
Cursor pointer;
struct pollfd pfd;
char *console_args[] = {"xterm", "-class", CONSOLE_WM_CLASS, "-e", "/bin/sh", "-c", "screen -D -RR " CONSOLE_SESSION_STRING, NULL};
+ char *quit_console_args[] = {"/bin/sh", "-c", "screen -dr " CONSOLE_SESSION_STRING " -X quit", NULL};
#define reterr_if(_cond, _fmt, _args...) \
err++;\
@@ -168,7 +168,7 @@ int main(int argc, char *argv[])
pfd.revents = 0;
pfd.fd = ConnectionNumber(vwm.display);
- while (!done) {
+ while (!vwm.done) {
do {
int delay;
@@ -283,6 +283,9 @@ int main(int argc, char *argv[])
vwm_composite_paint_all(&vwm);
}
+ /* tear down console */
+ vwm_launch(&vwm, quit_console_args, VWM_LAUNCH_MODE_FG);
+
/* close connection to server */
XFlush(vwm.display);
XCloseDisplay(vwm.display);
diff --git a/src/vwm.h b/src/vwm.h
index b7a975c..6442faa 100644
--- a/src/vwm.h
+++ b/src/vwm.h
@@ -53,6 +53,7 @@ typedef struct _vwm_t {
Atom wm_protocols_atom;
Atom wm_pid_atom;
int damage_event, damage_error;
+ int done; /* global flag to cause vwm to quit */
list_head_t desktops; /* global list of all (virtual) desktops in spatial created-in order */
list_head_t desktops_mru; /* global list of all (virtual) desktops in MRU order */
© All Rights Reserved