t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 2b047e460b5c4ddb0a72eac1bbe292539bc9049e
   DIR parent 5f74dc5e78b0aa8818a5dc9da06e7c8fc7616999
   URI Author: Anselm R Garbe <garbeam@gmail.com>
       Date:   Thu,  4 Dec 2008 20:15:00 +0000
       
       added Neale Pickett's spawn patch, thanks Neale
       Diffstat:
         M dwm.c                               |      35 ++++++++++++++-----------------
       
       1 file changed, 16 insertions(+), 19 deletions(-)
       ---
   DIR diff --git a/dwm.c b/dwm.c
       t@@ -182,6 +182,7 @@ static void setlayout(const Arg *arg);
        static void setmfact(const Arg *arg);
        static void setup(void);
        static void showhide(Client *c);
       +static void sigchld(int signal);
        static void spawn(const Arg *arg);
        static void tag(const Arg *arg);
        static int textnw(const char *text, unsigned int len);
       t@@ -1391,22 +1392,24 @@ showhide(Client *c) {
                }
        }
        
       +
       +void
       +sigchld(int signal) {
       +        while(0 < waitpid(-1, NULL, WNOHANG));
       +}
       +
        void
        spawn(const Arg *arg) {
       -        /* The double-fork construct avoids zombie processes and keeps the code
       -         * clean from stupid signal handlers. */
       +        signal(SIGCHLD, sigchld);
                if(fork() == 0) {
       -                if(fork() == 0) {
       -                        if(dpy)
       -                                close(ConnectionNumber(dpy));
       -                        setsid();
       -                        execvp(((char **)arg->v)[0], (char **)arg->v);
       -                        fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]);
       -                        perror(" failed");
       -                }
       +                if(dpy)
       +                        close(ConnectionNumber(dpy));
       +                setsid();
       +                execvp(((char **)arg->v)[0], (char **)arg->v);
       +                fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]);
       +                perror(" failed");
                        exit(0);
                }
       -        wait(0);
        }
        
        void
       t@@ -1455,14 +1458,8 @@ tile(void) {
                        h = wh;
        
                for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
       -                if(i + 1 == n) { /* remainder */
       -                        if(wy + wh - y < bh)
       -                                resize(c, x, y, w - 2 * c->bw, wy + wh - y - 2 * c->bw, False);
       -                        else
       -                                resize(c, x, y, w - 2 * c->bw, wy + wh - y - 2 * c->bw, resizehints);
       -                }
       -                else
       -                        resize(c, x, y, w - 2 * c->bw, h - 2 * c->bw, resizehints);
       +                resize(c, x, y, w - 2 * c->bw, /* remainder */ ((i + 1 == n)
       +                       ? wy + wh - y - 2 * c->bw : h - 2 * c->bw), resizehints);
                        if(h != wh)
                                y = c->y + HEIGHT(c);
                }