setlayout and setgeom are now togglable again
authorAnselm R Garbe <garbeam@gmail.com>
Mon, 24 Mar 2008 13:49:19 +0000
changeset 1159 34c88d74dff0
parent 1158 7c40610de8df
child 1160 bf37ef388dd6
setlayout and setgeom are now togglable again
config.def.h
dwm.1
dwm.c
--- a/config.def.h	Mon Mar 24 13:33:32 2008 +0000
+++ b/config.def.h	Mon Mar 24 13:49:19 2008 +0000
@@ -22,15 +22,11 @@
 /*   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 @@
 #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_c,		killclient,	NULL },
+	{ MODKEY,			XK_space,	setlayout,	NULL },
 	{ MODKEY|ShiftMask,		XK_space,	togglefloating,	NULL },
-	{ MODKEY|ShiftMask,		XK_c,		killclient,	NULL },
+	{ MODKEY|ControlMask,		XK_space,	setgeom,	NULL },
 	{ MODKEY,			XK_0,		view,		NULL },
 	{ MODKEY,			XK_1,		view,		tags[0] },
 	{ MODKEY,			XK_2,		view,		tags[1] },
--- a/dwm.1	Mon Mar 24 13:33:32 2008 +0000
+++ b/dwm.1	Mon Mar 24 13:49:19 2008 +0000
@@ -57,17 +57,11 @@
 Start
 .BR xterm.
 .TP
-.B Mod1\-f
-Applies floating layout.
-.TP
-.B Mod1\-m
-Applies monocle layout.
+.B Mod1\-space
+Toggles between layouts.
 .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.
--- a/dwm.c	Mon Mar 24 13:33:32 2008 +0000
+++ b/dwm.c	Mon Mar 24 13:49:19 2008 +0000
@@ -322,6 +322,10 @@
 	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 @@
 				return;
 			}
 		}
+		if((ev->x < x + blw) && ev->button == Button1) 
+			setlayout(NULL);
 	}
 	else if((c = getclient(ev->window))) {
 		focus(c);
@@ -426,7 +432,7 @@
 	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 @@
 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 @@
 
 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)