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
This commit is contained in:
		
							parent
							
								
									eeea4ef583
								
							
						
					
					
						commit
						a73de0cff4
					
				| @ -49,6 +49,7 @@ Key keys[] = { \ | |||||||
| 	{ MODKEY,			XK_l,		setmwfact,	"+0.05" }, \ | 	{ MODKEY,			XK_l,		setmwfact,	"+0.05" }, \ | ||||||
| 	{ MODKEY,			XK_m,		togglemax,	NULL }, \ | 	{ MODKEY,			XK_m,		togglemax,	NULL }, \ | ||||||
| 	{ MODKEY,			XK_Return,	zoom,		NULL }, \ | 	{ MODKEY,			XK_Return,	zoom,		NULL }, \ | ||||||
|  | 	{ MODKEY,			XK_Tab,		viewprevtag,	NULL }, \ | ||||||
| 	{ MODKEY|ShiftMask,		XK_space,	togglefloating,	NULL }, \ | 	{ MODKEY|ShiftMask,		XK_space,	togglefloating,	NULL }, \ | ||||||
| 	{ MODKEY|ShiftMask,		XK_c,		killclient,	NULL }, \ | 	{ MODKEY|ShiftMask,		XK_c,		killclient,	NULL }, \ | ||||||
| 	{ MODKEY,			XK_0,		view,		NULL }, \ | 	{ MODKEY,			XK_0,		view,		NULL }, \ | ||||||
|  | |||||||
| @ -17,7 +17,7 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 | |||||||
| # flags
 | # flags
 | ||||||
| CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\" | CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\" | ||||||
| LDFLAGS = -s ${LIBS} | LDFLAGS = -s ${LIBS} | ||||||
| #CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
 | #CFLAGS = -g -std=c99 -pedantic -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
 | ||||||
| #LDFLAGS = -g ${LIBS}
 | #LDFLAGS = -g ${LIBS}
 | ||||||
| 
 | 
 | ||||||
| # Solaris
 | # Solaris
 | ||||||
|  | |||||||
							
								
								
									
										54
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								dwm.c
									
									
									
									
									
								
							| @ -58,6 +58,22 @@ enum { WMProtocols, WMDelete, WMName, WMState, WMLast };/* default atoms */ | |||||||
| /* typedefs */ | /* typedefs */ | ||||||
| typedef struct Client Client; | 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 { | typedef struct { | ||||||
| 	int x, y, w, h; | 	int x, y, w, h; | ||||||
| 	unsigned long norm[ColLast]; | 	unsigned long norm[ColLast]; | ||||||
| @ -170,6 +186,7 @@ void updatebarpos(void); | |||||||
| void updatesizehints(Client *c); | void updatesizehints(Client *c); | ||||||
| void updatetitle(Client *c); | void updatetitle(Client *c); | ||||||
| void view(const char *arg); | void view(const char *arg); | ||||||
|  | void viewprevtag(const char *arg);	/* views previous selected tags */ | ||||||
| int xerror(Display *dpy, XErrorEvent *ee); | int xerror(Display *dpy, XErrorEvent *ee); | ||||||
| int xerrordummy(Display *dsply, XErrorEvent *ee); | int xerrordummy(Display *dsply, XErrorEvent *ee); | ||||||
| int xerrorstart(Display *dsply, XErrorEvent *ee); | int xerrorstart(Display *dsply, XErrorEvent *ee); | ||||||
| @ -219,22 +236,7 @@ Regs *regs = NULL; | |||||||
| /* Statically define the number of tags. */ | /* Statically define the number of tags. */ | ||||||
| unsigned int ntags = sizeof tags / sizeof tags[0]; | unsigned int ntags = sizeof tags / sizeof tags[0]; | ||||||
| Bool seltags[sizeof tags / sizeof tags[0]] = {[0] = True}; | Bool seltags[sizeof tags / sizeof tags[0]] = {[0] = True}; | ||||||
| 
 | Bool prevtags[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; |  | ||||||
| }; |  | ||||||
| 
 | 
 | ||||||
| /* functions*/ | /* functions*/ | ||||||
| void | void | ||||||
| @ -265,8 +267,7 @@ applyrules(Client *c) { | |||||||
| 	if(ch.res_name) | 	if(ch.res_name) | ||||||
| 		XFree(ch.res_name); | 		XFree(ch.res_name); | ||||||
| 	if(!matched) | 	if(!matched) | ||||||
| 		for(i = 0; i < ntags; i++) | 		memcpy(c->tags, seltags, sizeof seltags); | ||||||
| 			c->tags[i] = seltags[i]; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void | void | ||||||
| @ -1002,13 +1003,13 @@ leavenotify(XEvent *e) { | |||||||
| 
 | 
 | ||||||
| void | void | ||||||
| manage(Window w, XWindowAttributes *wa) { | manage(Window w, XWindowAttributes *wa) { | ||||||
| 	unsigned int i; |  | ||||||
| 	Client *c, *t = NULL; | 	Client *c, *t = NULL; | ||||||
| 	Window trans; | 	Window trans; | ||||||
| 	Status rettrans; | 	Status rettrans; | ||||||
| 	XWindowChanges wc; | 	XWindowChanges wc; | ||||||
| 
 | 
 | ||||||
| 	c = emallocz(sizeof(Client)); | 	c = emallocz(sizeof(Client)); | ||||||
|  | 	c->tags = emallocz(sizeof seltags); | ||||||
| 	c->win = w; | 	c->win = w; | ||||||
| 	c->x = wa->x; | 	c->x = wa->x; | ||||||
| 	c->y = wa->y; | 	c->y = wa->y; | ||||||
| @ -1043,8 +1044,7 @@ manage(Window w, XWindowAttributes *wa) { | |||||||
| 	if((rettrans = XGetTransientForHint(dpy, w, &trans) == Success)) | 	if((rettrans = XGetTransientForHint(dpy, w, &trans) == Success)) | ||||||
| 		for(t = clients; t && t->win != trans; t = t->next); | 		for(t = clients; t && t->win != trans; t = t->next); | ||||||
| 	if(t) | 	if(t) | ||||||
| 		for(i = 0; i < ntags; i++) | 		memcpy(c->tags, t->tags, sizeof seltags); | ||||||
| 			c->tags[i] = t->tags[i]; |  | ||||||
| 	applyrules(c); | 	applyrules(c); | ||||||
| 	if(!c->isfloating) | 	if(!c->isfloating) | ||||||
| 		c->isfloating = (rettrans == Success) || c->isfixed; | 		c->isfloating = (rettrans == Success) || c->isfixed; | ||||||
| @ -1702,6 +1702,7 @@ unmanage(Client *c) { | |||||||
| 		focus(NULL); | 		focus(NULL); | ||||||
| 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | ||||||
| 	setclientstate(c, WithdrawnState); | 	setclientstate(c, WithdrawnState); | ||||||
|  | 	free(c->tags); | ||||||
| 	free(c); | 	free(c); | ||||||
| 	XSync(dpy, False); | 	XSync(dpy, False); | ||||||
| 	XSetErrorHandler(xerror); | 	XSetErrorHandler(xerror); | ||||||
| @ -1838,6 +1839,7 @@ void | |||||||
| view(const char *arg) { | view(const char *arg) { | ||||||
| 	unsigned int i; | 	unsigned int i; | ||||||
| 
 | 
 | ||||||
|  | 	memcpy(prevtags, seltags, sizeof seltags); | ||||||
| 	for(i = 0; i < ntags; i++) | 	for(i = 0; i < ntags; i++) | ||||||
| 		seltags[i] = arg == NULL; | 		seltags[i] = arg == NULL; | ||||||
| 	i = idxoftag(arg); | 	i = idxoftag(arg); | ||||||
| @ -1846,6 +1848,16 @@ view(const char *arg) { | |||||||
| 	arrange(); | 	arrange(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | 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 | void | ||||||
| zoom(const char *arg) { | zoom(const char *arg) { | ||||||
| 	Client *c; | 	Client *c; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Anselm R. Garbe
						Anselm R. Garbe