diff options
| -rw-r--r-- | config.def.h | 1 | ||||
| -rw-r--r-- | config.mk | 2 | ||||
| -rw-r--r-- | dwm.c | 54 | 
3 files changed, 35 insertions, 22 deletions
| diff --git a/config.def.h b/config.def.h index 5a18854..1636dc6 100644 --- a/config.def.h +++ b/config.def.h @@ -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 }, \ @@ -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 @@ -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]; @@ -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); @@ -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 @@ -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 @@ -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; @@ -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; @@ -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); @@ -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); @@ -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; | 
