diff options
| author | Anselm R. Garbe <arg@suckless.org> | 2007-02-20 10:49:53 +0100 | 
|---|---|---|
| committer | Anselm R. Garbe <arg@suckless.org> | 2007-02-20 10:49:53 +0100 | 
| commit | 8012fcf3334148d2b39646fd372a7514cc74c250 (patch) | |
| tree | 157855dd25044e50f7696eb57655c88c6069ac2e | |
| parent | 6bc4556ebd7f48f52f9a446e53d1705d8fd79b27 (diff) | |
| download | dwm-8012fcf3334148d2b39646fd372a7514cc74c250.tar.gz | |
split screen.c into layout.c and tag.c (because the view is an implicit mixture of both)
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | dwm.h | 18 | ||||
| -rw-r--r-- | layout.c (renamed from screen.c) | 143 | ||||
| -rw-r--r-- | tag.c | 149 | 
4 files changed, 160 insertions, 152 deletions
| @@ -3,7 +3,7 @@  include config.mk -SRC = client.c event.c main.c screen.c util.c +SRC = client.c event.c layout.c main.c tag.c util.c  OBJ = ${SRC:.c=.o}  all: options dwm @@ -120,6 +120,15 @@ extern void zoom(Arg *arg);			/* zooms the focused client to master area, arg is  /* event.c */  extern void grabkeys(void);			/* grab all keys defined in config.h */ +/* layout.c */ +extern void incnmaster(Arg *arg);		/* increments nmaster with arg's index value */ +extern void initlayouts(void);			/* initialize layout array */ +extern void resizemaster(Arg *arg);		/* resizes the master percent with arg's index value */ +extern void restack(void);			/* restores z layers of all clients */ +extern void setlayout(Arg *arg);		/* sets layout, -1 toggles */ +extern void toggleversatile(Arg *arg);		/* toggles focusesd client between versatile/and non-versatile state */ +extern void versatile(void);			/* arranges all windows versatile */ +  /* main.c */  extern void drawstatus(void);			/* draw the bar */  extern unsigned int textw(const char *text);	/* return the width of text in px*/ @@ -127,20 +136,13 @@ extern void quit(Arg *arg);			/* quit dwm nicely */  extern void sendevent(Window w, Atom a, long value);	/* send synthetic event to w */  extern int xerror(Display *dsply, XErrorEvent *ee);	/* dwm's X error handler */ -/* screen.c */ +/* tag.c */  extern void compileregs(void);			/* initialize regexps of rules defined in config.h */ -extern void incnmaster(Arg *arg);		/* increments nmaster with arg's index value */ -extern void initlayouts(void);			/* initialize layout array */  extern Bool isvisible(Client *c);		/* returns True if client is visible */ -extern void resizemaster(Arg *arg);		/* resizes the master percent with arg's index value */ -extern void restack(void);			/* restores z layers of all clients */ -extern void setlayout(Arg *arg);		/* sets layout, -1 toggles */  extern void settags(Client *c, Client *trans);	/* sets tags of c */  extern void tag(Arg *arg);			/* tags c with arg's index */ -extern void toggleversatile(Arg *arg);		/* toggles focusesd client between versatile/and non-versatile state */  extern void toggletag(Arg *arg);		/* toggles c tags with arg's index */  extern void toggleview(Arg *arg);		/* toggles the tag with arg's index (in)visible */ -extern void versatile(void);			/* arranges all windows versatile */  extern void view(Arg *arg);			/* views the tag with arg's index */  /* util.c */ @@ -2,12 +2,6 @@   * See LICENSE file for license details.   */  #include "dwm.h" -#include <regex.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/types.h> -#include <X11/Xutil.h>  unsigned int master = MASTER;  unsigned int nmaster = NMASTER; @@ -16,22 +10,6 @@ Layout *lt = NULL;  /* static */ -typedef struct { -	const char *prop; -	const char *tags; -	Bool isversatile; -} Rule; - -typedef struct { -	regex_t *propregex; -	regex_t *tagregex; -} Regs; - -TAGS -RULES - -static Regs *regs = NULL; -static unsigned int nrules = 0;  static unsigned int nlayouts = 0;  static void @@ -91,33 +69,6 @@ LAYOUTS  /* extern */  void -compileregs(void) { -	unsigned int i; -	regex_t *reg; - -	if(regs) -		return; -	nrules = sizeof rule / sizeof rule[0]; -	regs = emallocz(nrules * sizeof(Regs)); -	for(i = 0; i < nrules; i++) { -		if(rule[i].prop) { -			reg = emallocz(sizeof(regex_t)); -			if(regcomp(reg, rule[i].prop, REG_EXTENDED)) -				free(reg); -			else -				regs[i].propregex = reg; -		} -		if(rule[i].tags) { -			reg = emallocz(sizeof(regex_t)); -			if(regcomp(reg, rule[i].tags, REG_EXTENDED)) -				free(reg); -			else -				regs[i].tagregex = reg; -		} -	} -} - -void  incnmaster(Arg *arg) {  	if((lt->arrange != tile) || (nmaster + arg->i < 1)  	|| (wah / (nmaster + arg->i) <= 2 * BORDERPX)) @@ -142,16 +93,6 @@ initlayouts(void) {  	}  } -Bool -isvisible(Client *c) { -	unsigned int i; - -	for(i = 0; i < ntags; i++) -		if(c->tags[i] && seltag[i]) -			return True; -	return False; -} -  void  resizemaster(Arg *arg) {  	if(lt->arrange != tile) @@ -213,68 +154,6 @@ setlayout(Arg *arg) {  }  void -settags(Client *c, Client *trans) { -	char prop[512]; -	unsigned int i, j; -	regmatch_t tmp; -	Bool matched = trans != NULL; -	XClassHint ch = { 0 }; - -	if(matched) -		for(i = 0; i < ntags; i++) -			c->tags[i] = trans->tags[i]; -	else { -		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->isversatile = rule[i].isversatile; -				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] = seltag[i]; -} - -void -tag(Arg *arg) { -	unsigned int i; - -	if(!sel) -		return; -	for(i = 0; i < ntags; i++) -		sel->tags[i] = (arg->i == -1) ? True : False; -	if(arg->i >= 0 && arg->i < ntags) -		sel->tags[arg->i] = True; -	lt->arrange(); -} - -void -toggletag(Arg *arg) { -	unsigned int i; - -	if(!sel) -		return; -	sel->tags[arg->i] = !sel->tags[arg->i]; -	for(i = 0; i < ntags && !sel->tags[i]; i++); -	if(i == ntags) -		sel->tags[arg->i] = True; -	lt->arrange(); -} - -void  toggleversatile(Arg *arg) {  	if(!sel || lt->arrange == versatile)  		return; @@ -283,17 +162,6 @@ toggleversatile(Arg *arg) {  }  void -toggleview(Arg *arg) { -	unsigned int i; - -	seltag[arg->i] = !seltag[arg->i]; -	for(i = 0; i < ntags && !seltag[i]; i++); -	if(i == ntags) -		seltag[arg->i] = True; /* cannot toggle last view */ -	lt->arrange(); -} - -void  versatile(void) {  	Client *c; @@ -315,14 +183,3 @@ versatile(void) {  	}  	restack();  } - -void -view(Arg *arg) { -	unsigned int i; - -	for(i = 0; i < ntags; i++) -		seltag[i] = (arg->i == -1) ? True : False; -	if(arg->i >= 0 && arg->i < ntags) -		seltag[arg->i] = True; -	lt->arrange(); -} @@ -0,0 +1,149 @@ +/* (C)opyright MMVI-MMVII Anselm R. Garbe <garbeam at gmail dot com> + * See LICENSE file for license details. + */ +#include "dwm.h" +#include <regex.h> +#include <stdio.h> +#include <X11/Xutil.h> + +/* static */ + +typedef struct { +	const char *prop; +	const char *tags; +	Bool isversatile; +} Rule; + +typedef struct { +	regex_t *propregex; +	regex_t *tagregex; +} Regs; + +TAGS +RULES + +static Regs *regs = NULL; +static unsigned int nrules = 0; + +/* extern */ + +void +compileregs(void) { +	unsigned int i; +	regex_t *reg; + +	if(regs) +		return; +	nrules = sizeof rule / sizeof rule[0]; +	regs = emallocz(nrules * sizeof(Regs)); +	for(i = 0; i < nrules; i++) { +		if(rule[i].prop) { +			reg = emallocz(sizeof(regex_t)); +			if(regcomp(reg, rule[i].prop, REG_EXTENDED)) +				free(reg); +			else +				regs[i].propregex = reg; +		} +		if(rule[i].tags) { +			reg = emallocz(sizeof(regex_t)); +			if(regcomp(reg, rule[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] && seltag[i]) +			return True; +	return False; +} + +void +settags(Client *c, Client *trans) { +	char prop[512]; +	unsigned int i, j; +	regmatch_t tmp; +	Bool matched = trans != NULL; +	XClassHint ch = { 0 }; + +	if(matched) +		for(i = 0; i < ntags; i++) +			c->tags[i] = trans->tags[i]; +	else { +		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->isversatile = rule[i].isversatile; +				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] = seltag[i]; +} + +void +tag(Arg *arg) { +	unsigned int i; + +	if(!sel) +		return; +	for(i = 0; i < ntags; i++) +		sel->tags[i] = (arg->i == -1) ? True : False; +	if(arg->i >= 0 && arg->i < ntags) +		sel->tags[arg->i] = True; +	lt->arrange(); +} + +void +toggletag(Arg *arg) { +	unsigned int i; + +	if(!sel) +		return; +	sel->tags[arg->i] = !sel->tags[arg->i]; +	for(i = 0; i < ntags && !sel->tags[i]; i++); +	if(i == ntags) +		sel->tags[arg->i] = True; +	lt->arrange(); +} + +void +toggleview(Arg *arg) { +	unsigned int i; + +	seltag[arg->i] = !seltag[arg->i]; +	for(i = 0; i < ntags && !seltag[i]; i++); +	if(i == ntags) +		seltag[arg->i] = True; /* cannot toggle last view */ +	lt->arrange(); +} + +void +view(Arg *arg) { +	unsigned int i; + +	for(i = 0; i < ntags; i++) +		seltag[i] = (arg->i == -1) ? True : False; +	if(arg->i >= 0 && arg->i < ntags) +		seltag[arg->i] = True; +	lt->arrange(); +} | 
