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_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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										54
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								dwm.c
									
									
									
									
									
								
							@ -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);
 | 
			
		||||
@ -1846,6 +1848,16 @@ view(const char *arg) {
 | 
			
		||||
	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
 | 
			
		||||
zoom(const char *arg) {
 | 
			
		||||
	Client *c;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user