t* dwm + patches
       
   URI git clone git://git.codevoid.de/dwm-sdk
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit a73de0cff42588d3dc3b40e4e8b198c847208dca
   DIR parent eeea4ef583a2ca3746e987bd2ecd570fd1869c2d
   URI Author: Anselm R. Garbe <garbeam@gmail.com>
       Date:   Wed, 10 Oct 2007 18:39:28 +0200
       
       added antoszka's viewprev patch with some minor modifications, restored Client->tags as Bool *, however kept the static initialization of ntags and seltags (prevtags) - this seems to be the best compromise
       Diffstat:
         M config.def.h                        |       1 +
         M config.mk                           |       2 +-
         M dwm.c                               |      54 +++++++++++++++++++------------
       
       3 files changed, 35 insertions(+), 22 deletions(-)
       ---
   DIR diff --git a/config.def.h b/config.def.h
       t@@ -49,6 +49,7 @@ Key keys[] = { \
                { MODKEY,                        XK_l,                setmwfact,        "+0.05" }, \
                { MODKEY,                        XK_m,                togglemax,        NULL }, \
                { MODKEY,                        XK_Return,        zoom,                NULL }, \
       +        { MODKEY,                        XK_Tab,                viewprevtag,        NULL }, \
                { MODKEY|ShiftMask,                XK_space,        togglefloating,        NULL }, \
                { MODKEY|ShiftMask,                XK_c,                killclient,        NULL }, \
                { MODKEY,                        XK_0,                view,                NULL }, \
   DIR diff --git a/config.mk b/config.mk
       t@@ -17,7 +17,7 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lX11
        # flags
        CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\"
        LDFLAGS = -s ${LIBS}
       -#CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
       +#CFLAGS = -g -std=c99 -pedantic -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
        #LDFLAGS = -g ${LIBS}
        
        # Solaris
   DIR diff --git a/dwm.c b/dwm.c
       t@@ -58,6 +58,22 @@ enum { WMProtocols, WMDelete, WMName, WMState, WMLast };/* default atoms */
        /* typedefs */
        typedef struct Client Client;
        
       +struct Client {
       +        char name[256];
       +        int x, y, w, h;
       +        int rx, ry, rw, rh; /* revert geometry */
       +        int basew, baseh, incw, inch, maxw, maxh, minw, minh;
       +        int minax, maxax, minay, maxay;
       +        long flags;
       +        unsigned int border, oldborder;
       +        Bool isbanned, isfixed, ismax, isfloating, wasfloating;
       +        Bool *tags;
       +        Client *next;
       +        Client *prev;
       +        Client *snext;
       +        Window win;
       +};
       +
        typedef struct {
                int x, y, w, h;
                unsigned long norm[ColLast];
       t@@ -170,6 +186,7 @@ void updatebarpos(void);
        void updatesizehints(Client *c);
        void updatetitle(Client *c);
        void view(const char *arg);
       +void viewprevtag(const char *arg);        /* views previous selected tags */
        int xerror(Display *dpy, XErrorEvent *ee);
        int xerrordummy(Display *dsply, XErrorEvent *ee);
        int xerrorstart(Display *dsply, XErrorEvent *ee);
       t@@ -219,22 +236,7 @@ Regs *regs = NULL;
        /* Statically define the number of tags. */
        unsigned int ntags = sizeof tags / sizeof tags[0];
        Bool seltags[sizeof tags / sizeof tags[0]] = {[0] = True};
       -
       -struct Client {
       -        char name[256];
       -        int x, y, w, h;
       -        int rx, ry, rw, rh; /* revert geometry */
       -        int basew, baseh, incw, inch, maxw, maxh, minw, minh;
       -        int minax, maxax, minay, maxay;
       -        long flags;
       -        unsigned int border, oldborder;
       -        Bool isbanned, isfixed, ismax, isfloating, wasfloating;
       -        Bool tags[sizeof tags / sizeof tags[0]];
       -        Client *next;
       -        Client *prev;
       -        Client *snext;
       -        Window win;
       -};
       +Bool prevtags[sizeof tags / sizeof tags[0]] = {[0] = True};
        
        /* functions*/
        void
       t@@ -265,8 +267,7 @@ applyrules(Client *c) {
                if(ch.res_name)
                        XFree(ch.res_name);
                if(!matched)
       -                for(i = 0; i < ntags; i++)
       -                        c->tags[i] = seltags[i];
       +                memcpy(c->tags, seltags, sizeof seltags);
        }
        
        void
       t@@ -1002,13 +1003,13 @@ leavenotify(XEvent *e) {
        
        void
        manage(Window w, XWindowAttributes *wa) {
       -        unsigned int i;
                Client *c, *t = NULL;
                Window trans;
                Status rettrans;
                XWindowChanges wc;
        
                c = emallocz(sizeof(Client));
       +        c->tags = emallocz(sizeof seltags);
                c->win = w;
                c->x = wa->x;
                c->y = wa->y;
       t@@ -1043,8 +1044,7 @@ manage(Window w, XWindowAttributes *wa) {
                if((rettrans = XGetTransientForHint(dpy, w, &trans) == Success))
                        for(t = clients; t && t->win != trans; t = t->next);
                if(t)
       -                for(i = 0; i < ntags; i++)
       -                        c->tags[i] = t->tags[i];
       +                memcpy(c->tags, t->tags, sizeof seltags);
                applyrules(c);
                if(!c->isfloating)
                        c->isfloating = (rettrans == Success) || c->isfixed;
       t@@ -1702,6 +1702,7 @@ unmanage(Client *c) {
                        focus(NULL);
                XUngrabButton(dpy, AnyButton, AnyModifier, c->win);
                setclientstate(c, WithdrawnState);
       +        free(c->tags);
                free(c);
                XSync(dpy, False);
                XSetErrorHandler(xerror);
       t@@ -1838,6 +1839,7 @@ void
        view(const char *arg) {
                unsigned int i;
        
       +        memcpy(prevtags, seltags, sizeof seltags);
                for(i = 0; i < ntags; i++)
                        seltags[i] = arg == NULL;
                i = idxoftag(arg);
       t@@ -1847,6 +1849,16 @@ view(const char *arg) {
        }
        
        void
       +viewprevtag(const char *arg) {
       +        static Bool tmptags[sizeof tags / sizeof tags[0]];
       +
       +        memcpy(tmptags, seltags, sizeof seltags);
       +        memcpy(seltags, prevtags, sizeof seltags);
       +        memcpy(prevtags, tmptags, sizeof seltags);
       +        arrange();
       +}
       +
       +void
        zoom(const char *arg) {
                Client *c;