added screen.c, removed layout.c and tag.c
This commit is contained in:
		
							parent
							
								
									96d7fe16ea
								
							
						
					
					
						commit
						47765f7286
					
				
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @ -3,7 +3,7 @@ | ||||
| 
 | ||||
| include config.mk | ||||
| 
 | ||||
| SRC += client.c draw.c event.c layout.c main.c tag.c util.c | ||||
| SRC += client.c draw.c event.c main.c screen.c util.c | ||||
| OBJ = ${SRC:.c=.o} | ||||
| 
 | ||||
| all: options dwm | ||||
|  | ||||
							
								
								
									
										8
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								client.c
									
									
									
									
									
								
							| @ -182,7 +182,7 @@ killclient(const char *arg) { | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| loadprops(Client *c) { | ||||
| getprops(Client *c) { | ||||
| 	unsigned int i; | ||||
| 	Bool result = False; | ||||
| 
 | ||||
| @ -242,11 +242,11 @@ manage(Window w, XWindowAttributes *wa) { | ||||
| 	if(t) | ||||
| 		for(i = 0; i < ntags; i++) | ||||
| 			c->tags[i] = t->tags[i]; | ||||
| 	if(!loadprops(c)) | ||||
| 	if(!getprops(c)) | ||||
| 		applyrules(c); | ||||
| 	if(!c->isfloating) | ||||
| 		c->isfloating = (rettrans == Success) || c->isfixed; | ||||
| 	saveprops(c); | ||||
| 	setprops(c); | ||||
| 	attach(c); | ||||
| 	attachstack(c); | ||||
| 	XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); /* some windows require this */ | ||||
| @ -318,7 +318,7 @@ resize(Client *c, int x, int y, int w, int h, Bool sizehints) { | ||||
| } | ||||
| 
 | ||||
| void | ||||
| saveprops(Client *c) { | ||||
| setprops(Client *c) { | ||||
| 	unsigned int i; | ||||
| 
 | ||||
| 	for(i = 0; i < ntags && i < sizeof prop - 1; i++) | ||||
|  | ||||
| @ -20,8 +20,8 @@ LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 | ||||
| # flags
 | ||||
| CFLAGS = -Os ${INCS} -DVERSION=\"${VERSION}\" | ||||
| LDFLAGS = -s ${LIBS} | ||||
| CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" | ||||
| LDFLAGS = -g ${LIBS} | ||||
| #CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\"
 | ||||
| #LDFLAGS = -g ${LIBS}
 | ||||
| 
 | ||||
| # Solaris
 | ||||
| #CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\"
 | ||||
|  | ||||
							
								
								
									
										35
									
								
								dwm.h
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								dwm.h
									
									
									
									
									
								
							| @ -96,11 +96,11 @@ void configure(Client *c);		/* send synthetic configure event */ | ||||
| void detach(Client *c);			/* detaches c from global client list */ | ||||
| void focus(Client *c);			/* focus c if visible && !NULL, or focus top visible */ | ||||
| void killclient(const char *arg);	/* kill sel  nicely */ | ||||
| Bool loadprops(Client *c);		/* loads client properties */ | ||||
| Bool getprops(Client *c);		/* gets client properties */ | ||||
| void manage(Window w, XWindowAttributes *wa);	/* manage new client */ | ||||
| void resize(Client *c, int x, int y, | ||||
| 		int w, int h, Bool sizehints);	/* resize with given coordinates c*/ | ||||
| void saveprops(Client *c);		/* saves client properties */ | ||||
| void setprops(Client *c);		/* sets client properties */ | ||||
| void unban(Client *c);			/* unbans c */ | ||||
| void unmanage(Client *c, long state);	/* unmanage c */ | ||||
| void updatesizehints(Client *c);	/* update the size hint variables of c */ | ||||
| @ -114,22 +114,6 @@ unsigned int textw(const char *text);	/* return the width of text in px*/ | ||||
| /* event.c */ | ||||
| void grabkeys(void);			/* grab all keys defined in config.h */ | ||||
| 
 | ||||
| /* layout.c */ | ||||
| void arrange(void);			/* arranges all windows depending on the layout in use */ | ||||
| void focusnext(const char *arg);	/* focuses next visible client */ | ||||
| void focusprev(const char *arg);	/* focuses prev visible client */ | ||||
| const char *getsymbol(void);		/* returns symbol of enabled layout */ | ||||
| Bool isfloating(void);			/* returns True if floating layout is enabled */ | ||||
| Bool isarrange(void (*func)());		/* returns True if func is the layout function in use */ | ||||
| void initlayouts(void);			/* initialize layout array */ | ||||
| void loaddwmprops(void);		/* loads dwm properties */ | ||||
| Client *nexttiled(Client *c);		/* returns tiled successor of c */ | ||||
| void restack(void);			/* restores z layers of all clients */ | ||||
| void savedwmprops(void);		/* saves dwm properties */ | ||||
| void setlayout(const char *arg);	/* sets layout, NULL means next layout */ | ||||
| void togglebar(const char *arg);	/* shows/hides the bar */ | ||||
| void togglemax(const char *arg);	/* toggles maximization of floating client */ | ||||
| 
 | ||||
| /* main.c */ | ||||
| Bool gettextprop(Window w, Atom atom, | ||||
| 		char *text, unsigned int size); /* return text property, UTF-8 compliant */ | ||||
| @ -137,12 +121,25 @@ void updatebarpos(void);		/* updates the bar position */ | ||||
| void quit(const char *arg);		/* quit dwm nicely */ | ||||
| int xerror(Display *dsply, XErrorEvent *ee);	/* dwm's X error handler */ | ||||
| 
 | ||||
| /* tag.c */ | ||||
| /* screen.c */ | ||||
| void applyrules(Client *c);		/* applies rules to c */ | ||||
| void arrange(void);			/* arranges all windows depending on the layout in use */ | ||||
| void compileregs(void);			/* initialize regexps of rules defined in config.h */ | ||||
| void focusnext(const char *arg);	/* focuses next visible client */ | ||||
| void focusprev(const char *arg);	/* focuses prev visible client */ | ||||
| const char *getsymbol(void);		/* returns symbol of enabled layout */ | ||||
| void initlayouts(void);			/* initialize layout array */ | ||||
| Bool isarrange(void (*func)());		/* returns True if func is the layout function in use */ | ||||
| Bool isfloating(void);			/* returns True if floating layout is enabled */ | ||||
| Bool isvisible(Client *c);		/* returns True if client is visible */ | ||||
| void getdwmprops(void);			/* gets dwm properties */ | ||||
| Client *nexttiled(Client *c);		/* returns tiled successor of c */ | ||||
| void restack(void);			/* restores z layers of all clients */ | ||||
| void setlayout(const char *arg);	/* sets layout, NULL means next layout */ | ||||
| void tag(const char *arg);		/* tags sel with arg's index */ | ||||
| void togglebar(const char *arg);	/* shows/hides the bar */ | ||||
| void togglefloating(const char *arg);	/* toggles sel between floating/tiled state */ | ||||
| void togglemax(const char *arg);	/* toggles maximization of floating client */ | ||||
| void toggletag(const char *arg);	/* toggles sel tags with arg's index */ | ||||
| void toggleview(const char *arg);	/* toggles the tag with arg's index (in)visible */ | ||||
| void view(const char *arg);		/* views the tag with arg's index */ | ||||
|  | ||||
							
								
								
									
										2
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								main.c
									
									
									
									
									
								
							| @ -206,7 +206,7 @@ setup(void) { | ||||
| 		XSetFont(dpy, dc.gc, dc.font.xfont->fid); | ||||
| 	/* multihead support */ | ||||
| 	selscreen = XQueryPointer(dpy, root, &w, &w, &i, &i, &i, &i, &mask); | ||||
| 	loaddwmprops(); | ||||
| 	getdwmprops(); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  | ||||
| @ -1,5 +1,7 @@ | ||||
| /* See LICENSE file for copyright and license details. */ | ||||
| #include "dwm.h" | ||||
| #include <regex.h> | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <X11/Xatom.h> | ||||
| @ -12,9 +14,35 @@ typedef struct { | ||||
| 	void (*arrange)(void); | ||||
| } Layout; | ||||
| 
 | ||||
| unsigned int blw = 0; | ||||
| static char prop[128]; | ||||
| typedef struct { | ||||
| 	const char *prop; | ||||
| 	const char *tags; | ||||
| 	Bool isfloating; | ||||
| } Rule; | ||||
| 
 | ||||
| typedef struct { | ||||
| 	regex_t *propregex; | ||||
| 	regex_t *tagregex; | ||||
| } Regs; | ||||
| 
 | ||||
| TAGS | ||||
| RULES | ||||
| 
 | ||||
| static char prop[512]; | ||||
| static unsigned int nrules = 0; | ||||
| static unsigned int nlayouts = 0; | ||||
| static unsigned int ltidx = 0; /* default */ | ||||
| static Regs *regs = NULL; | ||||
| 
 | ||||
| static unsigned int | ||||
| idxoftag(const char *tag) { | ||||
| 	unsigned int i; | ||||
| 
 | ||||
| 	for(i = 0; i < ntags; i++) | ||||
| 		if(tags[i] == tag) | ||||
| 			return i; | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| floating(void) { /* default floating layout */ | ||||
| @ -25,12 +53,56 @@ floating(void) { /* default floating layout */ | ||||
| 			resize(c, c->x, c->y, c->w, c->h, True); | ||||
| } | ||||
| 
 | ||||
| static unsigned int nlayouts = 0; | ||||
| static void | ||||
| setdwmprops(void) { | ||||
| 	unsigned int i; | ||||
| 
 | ||||
| 	for(i = 0; i < ntags && i < sizeof prop - 1; i++) | ||||
| 		prop[i] = seltags[i] ? '1' : '0'; | ||||
| 	if(i < sizeof prop - 1) | ||||
| 		prop[i++] = (char)ltidx; | ||||
| 	prop[i] = '\0'; | ||||
| 	XChangeProperty(dpy, root, dwmprops, XA_STRING, 8, | ||||
| 			PropModeReplace, (unsigned char *)prop, i); | ||||
| } | ||||
| 
 | ||||
| LAYOUTS | ||||
| 
 | ||||
| /* extern */ | ||||
| 
 | ||||
| unsigned int blw = 0; | ||||
| 
 | ||||
| void | ||||
| applyrules(Client *c) { | ||||
| 	unsigned int i, j; | ||||
| 	regmatch_t tmp; | ||||
| 	Bool matched = False; | ||||
| 	XClassHint ch = { 0 }; | ||||
| 
 | ||||
| 	/* rule matching */ | ||||
| 	XGetClassHint(dpy, c->win, &ch); | ||||
| 	snprintf(prop, sizeof prop, "%s:%s:%s", | ||||
| 			ch.res_class ? ch.res_class : "", | ||||
| 			ch.res_name ? ch.res_name : "", c->name); | ||||
| 	for(i = 0; i < nrules; i++) | ||||
| 		if(regs[i].propregex && !regexec(regs[i].propregex, prop, 1, &tmp, 0)) { | ||||
| 			c->isfloating = rules[i].isfloating; | ||||
| 			for(j = 0; regs[i].tagregex && j < ntags; j++) { | ||||
| 				if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) { | ||||
| 					matched = True; | ||||
| 					c->tags[j] = True; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	if(ch.res_class) | ||||
| 		XFree(ch.res_class); | ||||
| 	if(ch.res_name) | ||||
| 		XFree(ch.res_name); | ||||
| 	if(!matched) | ||||
| 		for(i = 0; i < ntags; i++) | ||||
| 			c->tags[i] = seltags[i]; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| arrange(void) { | ||||
| 	Client *c; | ||||
| @ -45,6 +117,33 @@ arrange(void) { | ||||
| 	restack(); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| compileregs(void) { | ||||
| 	unsigned int i; | ||||
| 	regex_t *reg; | ||||
| 
 | ||||
| 	if(regs) | ||||
| 		return; | ||||
| 	nrules = sizeof rules / sizeof rules[0]; | ||||
| 	regs = emallocz(nrules * sizeof(Regs)); | ||||
| 	for(i = 0; i < nrules; i++) { | ||||
| 		if(rules[i].prop) { | ||||
| 			reg = emallocz(sizeof(regex_t)); | ||||
| 			if(regcomp(reg, rules[i].prop, REG_EXTENDED)) | ||||
| 				free(reg); | ||||
| 			else | ||||
| 				regs[i].propregex = reg; | ||||
| 		} | ||||
| 		if(rules[i].tags) { | ||||
| 			reg = emallocz(sizeof(regex_t)); | ||||
| 			if(regcomp(reg, rules[i].tags, REG_EXTENDED)) | ||||
| 				free(reg); | ||||
| 			else | ||||
| 				regs[i].tagregex = reg; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void | ||||
| focusnext(const char *arg) { | ||||
| 	Client *c; | ||||
| @ -83,17 +182,6 @@ getsymbol(void) | ||||
| 	return layouts[ltidx].symbol; | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| isfloating(void) { | ||||
| 	return layouts[ltidx].arrange == floating; | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| isarrange(void (*func)()) | ||||
| { | ||||
| 	return func == layouts[ltidx].arrange; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| initlayouts(void) { | ||||
| 	unsigned int i, w; | ||||
| @ -106,8 +194,29 @@ initlayouts(void) { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| isfloating(void) { | ||||
| 	return layouts[ltidx].arrange == floating; | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| isarrange(void (*func)()) | ||||
| { | ||||
| 	return func == layouts[ltidx].arrange; | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| isvisible(Client *c) { | ||||
| 	unsigned int i; | ||||
| 
 | ||||
| 	for(i = 0; i < ntags; i++) | ||||
| 		if(c->tags[i] && seltags[i]) | ||||
| 			return True; | ||||
| 	return False; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| loaddwmprops(void) { | ||||
| getdwmprops(void) { | ||||
| 	unsigned int i; | ||||
| 
 | ||||
| 	if(gettextprop(root, dwmprops, prop, sizeof prop)) { | ||||
| @ -155,19 +264,6 @@ restack(void) { | ||||
| 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| savedwmprops(void) { | ||||
| 	unsigned int i; | ||||
| 
 | ||||
| 	for(i = 0; i < ntags && i < sizeof prop - 1; i++) | ||||
| 		prop[i] = seltags[i] ? '1' : '0'; | ||||
| 	if(i < sizeof prop - 1) | ||||
| 		prop[i++] = (char)ltidx; | ||||
| 	prop[i] = '\0'; | ||||
| 	XChangeProperty(dpy, root, dwmprops, XA_STRING, 8, | ||||
| 			PropModeReplace, (unsigned char *)prop, i); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| setlayout(const char *arg) { | ||||
| 	int i; | ||||
| @ -186,7 +282,22 @@ setlayout(const char *arg) { | ||||
| 		arrange(); | ||||
| 	else | ||||
| 		drawstatus(); | ||||
| 	savedwmprops(); | ||||
| 	setdwmprops(); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| tag(const char *arg) { | ||||
| 	unsigned int i; | ||||
| 
 | ||||
| 	if(!sel) | ||||
| 		return; | ||||
| 	for(i = 0; i < ntags; i++) | ||||
| 		sel->tags[i] = arg == NULL; | ||||
| 	i = idxoftag(arg); | ||||
| 	if(i >= 0 && i < ntags) | ||||
| 		sel->tags[i] = True; | ||||
| 	setprops(sel); | ||||
| 	arrange(); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| @ -199,6 +310,18 @@ togglebar(const char *arg) { | ||||
| 	arrange(); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| togglefloating(const char *arg) { | ||||
| 	if(!sel || isfloating()) | ||||
| 		return; | ||||
| 	sel->isfloating = !sel->isfloating; | ||||
| 	if(sel->isfloating) { | ||||
| 		resize(sel, sel->x, sel->y, sel->w, sel->h, True); | ||||
| 		setprops(sel); | ||||
| 	} | ||||
| 	arrange(); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| togglemax(const char *arg) { | ||||
| 	XEvent ev; | ||||
| @ -217,3 +340,44 @@ togglemax(const char *arg) { | ||||
| 	drawstatus(); | ||||
| 	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| toggletag(const char *arg) { | ||||
| 	unsigned int i, j; | ||||
| 
 | ||||
| 	if(!sel) | ||||
| 		return; | ||||
| 	i = idxoftag(arg); | ||||
| 	sel->tags[i] = !sel->tags[i]; | ||||
| 	for(j = 0; j < ntags && !sel->tags[j]; j++); | ||||
| 	if(j == ntags) | ||||
| 		sel->tags[i] = True; | ||||
| 	setprops(sel); | ||||
| 	arrange(); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| toggleview(const char *arg) { | ||||
| 	unsigned int i, j; | ||||
| 
 | ||||
| 	i = idxoftag(arg); | ||||
| 	seltags[i] = !seltags[i]; | ||||
| 	for(j = 0; j < ntags && !seltags[j]; j++); | ||||
| 	if(j == ntags) | ||||
| 		seltags[i] = True; /* cannot toggle last view */ | ||||
| 	setdwmprops(); | ||||
| 	arrange(); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| view(const char *arg) { | ||||
| 	unsigned int i; | ||||
| 
 | ||||
| 	for(i = 0; i < ntags; i++) | ||||
| 		seltags[i] = arg == NULL; | ||||
| 	i = idxoftag(arg); | ||||
| 	if(i >= 0 && i < ntags) | ||||
| 		seltags[i] = True; | ||||
| 	setdwmprops(); | ||||
| 	arrange(); | ||||
| } | ||||
							
								
								
									
										174
									
								
								tag.c
									
									
									
									
									
								
							
							
						
						
									
										174
									
								
								tag.c
									
									
									
									
									
								
							| @ -1,174 +0,0 @@ | ||||
| /* See LICENSE file for copyright and license details. */ | ||||
| #include "dwm.h" | ||||
| #include <regex.h> | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <X11/Xutil.h> | ||||
| 
 | ||||
| /* static */ | ||||
| 
 | ||||
| typedef struct { | ||||
| 	const char *prop; | ||||
| 	const char *tags; | ||||
| 	Bool isfloating; | ||||
| } Rule; | ||||
| 
 | ||||
| typedef struct { | ||||
| 	regex_t *propregex; | ||||
| 	regex_t *tagregex; | ||||
| } Regs; | ||||
| 
 | ||||
| TAGS | ||||
| RULES | ||||
| 
 | ||||
| static Regs *regs = NULL; | ||||
| static unsigned int nrules = 0; | ||||
| static char prop[512]; | ||||
| 
 | ||||
| static unsigned int | ||||
| idxoftag(const char *tag) { | ||||
| 	unsigned int i; | ||||
| 
 | ||||
| 	for(i = 0; i < ntags; i++) | ||||
| 		if(tags[i] == tag) | ||||
| 			return i; | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| /* extern */ | ||||
| 
 | ||||
| void | ||||
| applyrules(Client *c) { | ||||
| 	unsigned int i, j; | ||||
| 	regmatch_t tmp; | ||||
| 	Bool matched = False; | ||||
| 	XClassHint ch = { 0 }; | ||||
| 
 | ||||
| 	/* rule matching */ | ||||
| 	XGetClassHint(dpy, c->win, &ch); | ||||
| 	snprintf(prop, sizeof prop, "%s:%s:%s", | ||||
| 			ch.res_class ? ch.res_class : "", | ||||
| 			ch.res_name ? ch.res_name : "", c->name); | ||||
| 	for(i = 0; i < nrules; i++) | ||||
| 		if(regs[i].propregex && !regexec(regs[i].propregex, prop, 1, &tmp, 0)) { | ||||
| 			c->isfloating = rules[i].isfloating; | ||||
| 			for(j = 0; regs[i].tagregex && j < ntags; j++) { | ||||
| 				if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) { | ||||
| 					matched = True; | ||||
| 					c->tags[j] = True; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	if(ch.res_class) | ||||
| 		XFree(ch.res_class); | ||||
| 	if(ch.res_name) | ||||
| 		XFree(ch.res_name); | ||||
| 	if(!matched) | ||||
| 		for(i = 0; i < ntags; i++) | ||||
| 			c->tags[i] = seltags[i]; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| compileregs(void) { | ||||
| 	unsigned int i; | ||||
| 	regex_t *reg; | ||||
| 
 | ||||
| 	if(regs) | ||||
| 		return; | ||||
| 	nrules = sizeof rules / sizeof rules[0]; | ||||
| 	regs = emallocz(nrules * sizeof(Regs)); | ||||
| 	for(i = 0; i < nrules; i++) { | ||||
| 		if(rules[i].prop) { | ||||
| 			reg = emallocz(sizeof(regex_t)); | ||||
| 			if(regcomp(reg, rules[i].prop, REG_EXTENDED)) | ||||
| 				free(reg); | ||||
| 			else | ||||
| 				regs[i].propregex = reg; | ||||
| 		} | ||||
| 		if(rules[i].tags) { | ||||
| 			reg = emallocz(sizeof(regex_t)); | ||||
| 			if(regcomp(reg, rules[i].tags, REG_EXTENDED)) | ||||
| 				free(reg); | ||||
| 			else | ||||
| 				regs[i].tagregex = reg; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| Bool | ||||
| isvisible(Client *c) { | ||||
| 	unsigned int i; | ||||
| 
 | ||||
| 	for(i = 0; i < ntags; i++) | ||||
| 		if(c->tags[i] && seltags[i]) | ||||
| 			return True; | ||||
| 	return False; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| tag(const char *arg) { | ||||
| 	unsigned int i; | ||||
| 
 | ||||
| 	if(!sel) | ||||
| 		return; | ||||
| 	for(i = 0; i < ntags; i++) | ||||
| 		sel->tags[i] = arg == NULL; | ||||
| 	i = idxoftag(arg); | ||||
| 	if(i >= 0 && i < ntags) | ||||
| 		sel->tags[i] = True; | ||||
| 	saveprops(sel); | ||||
| 	arrange(); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| togglefloating(const char *arg) { | ||||
| 	if(!sel || isfloating()) | ||||
| 		return; | ||||
| 	sel->isfloating = !sel->isfloating; | ||||
| 	if(sel->isfloating) { | ||||
| 		resize(sel, sel->x, sel->y, sel->w, sel->h, True); | ||||
| 		saveprops(sel); | ||||
| 	} | ||||
| 	arrange(); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| toggletag(const char *arg) { | ||||
| 	unsigned int i, j; | ||||
| 
 | ||||
| 	if(!sel) | ||||
| 		return; | ||||
| 	i = idxoftag(arg); | ||||
| 	sel->tags[i] = !sel->tags[i]; | ||||
| 	for(j = 0; j < ntags && !sel->tags[j]; j++); | ||||
| 	if(j == ntags) | ||||
| 		sel->tags[i] = True; | ||||
| 	saveprops(sel); | ||||
| 	arrange(); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| toggleview(const char *arg) { | ||||
| 	unsigned int i, j; | ||||
| 
 | ||||
| 	i = idxoftag(arg); | ||||
| 	seltags[i] = !seltags[i]; | ||||
| 	for(j = 0; j < ntags && !seltags[j]; j++); | ||||
| 	if(j == ntags) | ||||
| 		seltags[i] = True; /* cannot toggle last view */ | ||||
| 	savedwmprops(); | ||||
| 	arrange(); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| view(const char *arg) { | ||||
| 	unsigned int i; | ||||
| 
 | ||||
| 	for(i = 0; i < ntags; i++) | ||||
| 		seltags[i] = arg == NULL; | ||||
| 	i = idxoftag(arg); | ||||
| 	if(i >= 0 && i < ntags) | ||||
| 		seltags[i] = True; | ||||
| 	savedwmprops(); | ||||
| 	arrange(); | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Anselm R. Garbe
						Anselm R. Garbe