| tadded antoszka's viewprev patch with some minor modifications, restored Client… | |
| git clone git://src.adamsgaard.dk/dwm | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit a73de0cff42588d3dc3b40e4e8b198c847208dca | |
| parent eeea4ef583a2ca3746e987bd2ecd570fd1869c2d | |
| Author: Anselm R. Garbe <[email protected]> | |
| Date: Wed, 10 Oct 2007 18:39:28 +0200 | |
| added antoszka's viewprev patch with some minor modifications, restored Client-… | |
| Diffstat: | |
| M config.def.h | 1 + | |
| M config.mk | 2 +- | |
| M dwm.c | 54 +++++++++++++++++++----------… | |
| 3 files changed, 35 insertions(+), 22 deletions(-) | |
| --- | |
| diff --git a/config.def.h b/config.def.h | |
| t@@ -49,6 +49,7 @@ Key keys[] = { \ | |
| { MODKEY, XK_l, setmwfact, … | |
| { MODKEY, XK_m, togglemax, … | |
| { MODKEY, XK_Return, zoom, … | |
| + { MODKEY, XK_Tab, viewprevtag, … | |
| { MODKEY|ShiftMask, XK_space, togglefloating, … | |
| { MODKEY|ShiftMask, XK_c, killclient, … | |
| { MODKEY, XK_0, view, … | |
| 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 | |
| diff --git a/dwm.c b/dwm.c | |
| t@@ -58,6 +58,22 @@ enum { WMProtocols, WMDelete, WMName, WMState, WMLast };/* … | |
| /* 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; | |