diff --git a/config.def.h b/config.def.h index 8e68937..aa79412 100644 --- a/config.def.h +++ b/config.def.h @@ -100,7 +100,7 @@ static int fakefsindicatortype = INDICATOR_PLUS; static int floatfakefsindicatortype = INDICATOR_PLUS_AND_LARGER_SQUARE; #endif // FAKEFULLSCREEN_CLIENT_PATCH #if ONLYQUITONEMPTY_PATCH -static const int quit_empty_window_count = 2; /* only allow dwm to quit if no windows are open, value here represents number of deamons */ +static const int quit_empty_window_count = 0; /* only allow dwm to quit if no (<= count) windows are open */ #endif // ONLYQUITONEMPTY_PATCH #if BAR_EXTRASTATUS_PATCH static const char statussep = ';'; /* separator between status bars */ diff --git a/dwm.c b/dwm.c index 2bd28e6..5d53587 100644 --- a/dwm.c +++ b/dwm.c @@ -2744,27 +2744,23 @@ quit(const Arg *arg) #if COOL_AUTOSTART_PATCH size_t i; #endif // COOL_AUTOSTART_PATCH - #if ONLYQUITONEMPTY_PATCH - unsigned int n; - Window *junk = malloc(1); - - XQueryTree(dpy, root, junk, junk, &junk, &n); - - if (n <= quit_empty_window_count) - { - #if RESTARTSIG_PATCH - restart = arg->i; - #endif // RESTARTSIG_PATCH - running = 0; - } - else - printf("[dwm] not exiting (n=%d)\n", n); - - free(junk); - #else // !ONLYQUITONEMPTY_PATCH #if RESTARTSIG_PATCH restart = arg->i; #endif // RESTARTSIG_PATCH + #if ONLYQUITONEMPTY_PATCH + Monitor *m; + Client *c; + unsigned int n = 0; + + for (m = mons; m; m = m->next) + for (c = m->clients; c; c = c->next, n++); + + if (restart || n <= quit_empty_window_count) + running = 0; + else + fprintf(stderr, "[dwm] not exiting (n=%d)\n", n); + + #else // !ONLYQUITONEMPTY_PATCH running = 0; #endif // ONLYQUITONEMPTY_PATCH