# HG changeset patch # User Anselm R. Garbe # Date 1192034368 -7200 # Node ID 0735e86bbd499846bd3880242b9d4834b182c13a # Parent bc0929d033885b7622e79b6778b2e5336be85640 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 diff -r bc0929d03388 -r 0735e86bbd49 config.def.h --- a/config.def.h Sat Oct 06 19:43:15 2007 +0200 +++ b/config.def.h Wed Oct 10 18:39:28 2007 +0200 @@ -49,6 +49,7 @@ { 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 }, \ diff -r bc0929d03388 -r 0735e86bbd49 config.mk --- a/config.mk Sat Oct 06 19:43:15 2007 +0200 +++ b/config.mk Wed Oct 10 18:39:28 2007 +0200 @@ -17,7 +17,7 @@ # 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 diff -r bc0929d03388 -r 0735e86bbd49 dwm.c --- a/dwm.c Sat Oct 06 19:43:15 2007 +0200 +++ b/dwm.c Wed Oct 10 18:39:28 2007 +0200 @@ -58,6 +58,22 @@ /* 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]; @@ -170,6 +186,7 @@ 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); @@ -219,22 +236,7 @@ /* 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 @@ -265,8 +267,7 @@ 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 @@ -1002,13 +1003,13 @@ 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; @@ -1043,8 +1044,7 @@ 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; @@ -1702,6 +1702,7 @@ focus(NULL); XUngrabButton(dpy, AnyButton, AnyModifier, c->win); setclientstate(c, WithdrawnState); + free(c->tags); free(c); XSync(dpy, False); XSetErrorHandler(xerror); @@ -1838,6 +1839,7 @@ 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); @@ -1847,6 +1849,16 @@ } 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;