diff options
| author | Anselm R Garbe <garbeam@gmail.com> | 2008-03-24 13:49:19 +0000 | 
|---|---|---|
| committer | Anselm R Garbe <garbeam@gmail.com> | 2008-03-24 13:49:19 +0000 | 
| commit | 20cd3360876f551c0f3b4c9c5a827a64b829e6ef (patch) | |
| tree | c21d17c8a63c87f3d666215bc804565ed7f7af71 | |
| parent | a6a216f28cbc49afaace269c2662382a351fda24 (diff) | |
setlayout and setgeom are now togglable again
| -rw-r--r-- | config.def.h | 20 | ||||
| -rw-r--r-- | dwm.1 | 14 | ||||
| -rw-r--r-- | dwm.c | 46 | 
3 files changed, 38 insertions, 42 deletions
| diff --git a/config.def.h b/config.def.h index b62e938..9c15313 100644 --- a/config.def.h +++ b/config.def.h @@ -22,15 +22,11 @@ Rule rules[] = {  /*   func name  bx  by  bw  wx  wy  ww     wh  mx  my       mw  mh     tx  ty     tw  th  mox moy mow moh */  DEFGEOM(single,  0,  0, sw,  0, bh, sw, sh-bh, wx, wy, 0.55*sw, wh, mx+mw, wy, ww-mw, wh,  wx, wy, ww, wh)  DEFGEOM(dual,    0,  0,1280, 0, bh, ww, wh-bh, wx, wy, 1280,800-bh,  1280,  0, ww-mw, sh,  mx, my, mw, mh) -/* DEFGEOM(growmaster, bx, by, bw, wx, wy, ww, wh, mx, my, mw+20, mh, mx+mw, ty, tw-20, th, mox, moy, mow, moh) */ -/* DEFGEOM(shrinkmaster, bx, by, bw, wx, wy, ww, wh, mx, my, mw-20, mh, mx+mw, ty, tw+20, th, mox, moy, mow, moh) */  Geom geoms[] = {  	/* symbol	function */ -	{ "<>",		single },	/* first entry is default */ -	{ ")(",		dual }, -/*	{ "+|",		growmaster },*/ -/*	{ "|-",		shrinkmaster },*/ +	{ "[]",		single },	/* first entry is default */ +	{ "[][]",	dual },  };  /* layout(s) */ @@ -49,22 +45,18 @@ Layout layouts[] = {  #define MODKEY			Mod1Mask  Key keys[] = {  	/* modifier			key		function	argument */ -	{ MODKEY,			XK_a,		setgeom,	")(" }, -	{ MODKEY,			XK_d,		setgeom,	"<>" },  	{ MODKEY,			XK_p,		spawn,  		"exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'" }, -	{ MODKEY|ShiftMask,		XK_Return,	spawn, "exec uxterm" }, +	{ MODKEY|ShiftMask,		XK_Return,	spawn,		"exec uxterm" },  	{ MODKEY,			XK_j,		focusnext,	NULL },  	{ MODKEY,			XK_k,		focusprev,	NULL },  	{ MODKEY,			XK_r,		reapply,	NULL },  	{ MODKEY,			XK_Return,	zoom,		NULL },  	{ MODKEY,			XK_Tab,		viewprevtag,	NULL }, -	{ MODKEY,			XK_m,		setlayout,	"[M]" }, -	{ MODKEY,			XK_f,		setlayout,	"><>" }, -	{ MODKEY,			XK_v,		setlayout,	"[]=" }, -	{ MODKEY,			XK_h,		setlayout,	"[]|" }, -	{ MODKEY|ShiftMask,		XK_space,	togglefloating,	NULL },  	{ MODKEY|ShiftMask,		XK_c,		killclient,	NULL }, +	{ MODKEY,			XK_space,	setlayout,	NULL }, +	{ MODKEY|ShiftMask,		XK_space,	togglefloating,	NULL }, +	{ MODKEY|ControlMask,		XK_space,	setgeom,	NULL },  	{ MODKEY,			XK_0,		view,		NULL },  	{ MODKEY,			XK_1,		view,		tags[0] },  	{ MODKEY,			XK_2,		view,		tags[1] }, @@ -57,17 +57,11 @@ click on a tag label adds/removes that tag to/from the focused window.  Start  .BR xterm.  .TP -.B Mod1\-f -Applies floating layout. +.B Mod1\-space +Toggles between layouts.  .TP -.B Mod1\-m -Applies monocle layout. -.TP -.B Mod1\-v -Applies vertical tiled layout. -.TP -.B Mod1\-h -Applies horizontal tiled layout. +.B Mod1\-Control\-space +Toggles between geometries.  .TP  .B Mod1\-j  Focus next window. @@ -322,6 +322,10 @@ buttonpress(XEvent *e) {  	XButtonPressedEvent *ev = &e->xbutton;  	if(ev->window == barwin) { +		if((ev->x < bgw) && ev->button == Button1) { +			setgeom(NULL); +			return; +		}  		x = bgw;  		for(i = 0; i < LENGTH(tags); i++) {  			x += textw(tags[i]); @@ -341,6 +345,8 @@ buttonpress(XEvent *e) {  				return;  			}  		} +		if((ev->x < x + blw) && ev->button == Button1)  +			setlayout(NULL);  	}  	else if((c = getclient(ev->window))) {  		focus(c); @@ -426,7 +432,7 @@ configurenotify(XEvent *e) {  	if(ev->window == root && (ev->width != sw || ev->height != sh)) {  		sw = ev->width;  		sh = ev->height; -		setgeom(NULL); +		setgeom(geom->symbol);  	}  } @@ -1417,12 +1423,18 @@ void  setgeom(const char *arg) {  	unsigned int i; -	for(i = 0; arg && i < LENGTH(geoms); i++) -		if(!strcmp(geoms[i].symbol, arg)) -			break; -	if(i == LENGTH(geoms)) -		return; -	geom = &geoms[i]; +	if(!arg) { +		if(++geom == &geoms[LENGTH(geoms)]) +			geom = &geoms[0]; +	} +	else { +		for(i = 0; i < LENGTH(geoms); i++) +			if(!strcmp(geoms[i].symbol, arg)) +				break; +		if(i == LENGTH(geoms)) +			return; +		geom = &geoms[i]; +	}  	geom->apply();  	updatebarpos();  	arrange(); @@ -1430,20 +1442,18 @@ setgeom(const char *arg) {  void  setlayout(const char *arg) { -	static Layout *revert = 0;  	unsigned int i; -	if(!arg) -		return; -	for(i = 0; i < LENGTH(layouts); i++) -		if(!strcmp(arg, layouts[i].symbol)) -			break; -	if(i == LENGTH(layouts)) -		return; -	if(revert && &layouts[i] == lt) -		lt = revert; +	if(!arg) { +		if(++lt == &layouts[LENGTH(layouts)]) +			lt = &layouts[0]; +	}  	else { -		revert = lt; +		for(i = 0; i < LENGTH(layouts); i++) +			if(!strcmp(arg, layouts[i].symbol)) +				break; +		if(i == LENGTH(layouts)) +			return;  		lt = &layouts[i];  	}  	if(sel) | 
