about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--config.def.h12
-rw-r--r--dwm.13
-rw-r--r--dwm.c122
3 files changed, 52 insertions, 85 deletions
diff --git a/config.def.h b/config.def.h
index 0b5d9e4..c8e88de 100644
--- a/config.def.h
+++ b/config.def.h
@@ -18,17 +18,8 @@ Rule rules[] = {
 	{ "Gimp",	NULL,		NULL,		NULL,		True },
 };
 
-/* geometries, s{x,y,w,h} and bh are already initualized here */
-/*   func name  bx  by  bw  wx  wy  ww     wh  mx  my       mw  mh     tx  ty     tw  th  mox moy mow moh */
-#define MFACT			0.55	/* master width factor [0.1 .. 0.9] */
-DEFGEOM(single,  0,  0, sw,  0, bh, sw, sh-bh, wx, wy, mfact*ww, wh, mx+mw, wy, ww-mw, wh,  wx, wy, ww, wh)
-
-Geom geoms[] = {
-	/* symbol	function */
-	{ "[]",		single },	/* first entry is default */
-};
-
 /* layout(s) */
+#define MFACT			0.55	/* master width factor [0.1 .. 0.9] */
 #define RESIZEHINTS		True	/* False - respect size hints in tiled resizals */
 #define SNAP			32	/* snap pixel */
 
@@ -58,7 +49,6 @@ Key keys[] = {
 	{ 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] },
diff --git a/dwm.1 b/dwm.1
index fc750de..8b53942 100644
--- a/dwm.1
+++ b/dwm.1
@@ -60,9 +60,6 @@ Start
 .B Mod1\-space
 Toggles between layouts.
 .TP
-.B Mod1\-Control\-space
-Toggles between geometries.
-.TP
 .B Mod1\-j
 Focus next window.
 .TP
diff --git a/dwm.c b/dwm.c
index 56ca615..6ef2ab2 100644
--- a/dwm.c
+++ b/dwm.c
@@ -41,21 +41,13 @@
 #include <X11/Xutil.h>
 
 /* macros */
-#define MAX(a, b) ((a)>(b)?(a):(b))
-#define MIN(a, b) ((a)<(b)?(a):(b))
-#define BUTTONMASK		(ButtonPressMask|ButtonReleaseMask)
-#define CLEANMASK(mask)		(mask & ~(numlockmask|LockMask))
-#define LENGTH(x)		(sizeof x / sizeof x[0])
-#define MAXTAGLEN		16
-#define MOUSEMASK		(BUTTONMASK|PointerMotionMask)
-#define DEFGEOM(GEONAME,BX,BY,BW,WX,WY,WW,WH,MX,MY,MW,MH,TX,TY,TW,TH,MOX,MOY,MOW,MOH) \
-void GEONAME(void) { \
-	bx = (BX); by = (BY); bw = (BW); \
-	wx = (WX); wy = (WY); ww = (WW); wh = (WH); \
-	mx = (MX); my = (MY); mw = (MW); mh = (MH); \
-	tx = (TX); ty = (TY); tw = (TW); th = (TH); \
-	mox = (MOX); moy = (MOY); mow = (MOW); moh = (MOH); \
-}
+#define MAX(a, b)	((a) > (b) ? (a) : (b))
+#define MIN(a, b)	((a) < (b) ? (a) : (b))
+#define BUTTONMASK	(ButtonPressMask|ButtonReleaseMask)
+#define CLEANMASK(mask)	(mask & ~(numlockmask|LockMask))
+#define LENGTH(x)	(sizeof x / sizeof x[0])
+#define MAXTAGLEN	16
+#define MOUSEMASK	(BUTTONMASK|PointerMotionMask)
 
 /* enums */
 enum { CurNormal, CurResize, CurMove, CurLast };	/* cursor */
@@ -97,11 +89,6 @@ typedef struct {
 } DC; /* draw context */
 
 typedef struct {
-	const char *symbol;
-	void (*apply)(void);
-} Geom;
-
-typedef struct {
 	unsigned long mod;
 	KeySym keysym;
 	void (*func)(const char *arg);
@@ -178,7 +165,6 @@ void restack(void);
 void run(void);
 void scan(void);
 void setclientstate(Client *c, long state);
-void setgeom(const char *arg);
 void setlayout(const char *arg);
 void setmfact(const char *arg);
 void setup(void);
@@ -198,7 +184,8 @@ void toggleview(const char *arg);
 void unban(Client *c);
 void unmanage(Client *c);
 void unmapnotify(XEvent *e);
-void updatebarpos(void);
+void updatebar(void);
+void updategeom(void);
 void updatesizehints(Client *c);
 void updatetitle(Client *c);
 void updatewmhints(Client *c);
@@ -213,7 +200,7 @@ void zoom(const char *arg);
 char stext[256];
 int screen, sx, sy, sw, sh;
 int (*xerrorxlib)(Display *, XErrorEvent *);
-int bx, by, bw, bh, blw, bgw, mx, my, mw, mh, mox, moy, mow, moh, tx, ty, tw, th, wx, wy, ww, wh;
+int bx, by, bw, bh, blw, mx, my, mw, mh, tx, ty, tw, th, wx, wy, ww, wh;
 int seltags = 0;
 double mfact;
 unsigned int numlockmask = 0;
@@ -241,8 +228,6 @@ Client *stack = NULL;
 Cursor cursor[CurLast];
 Display *dpy;
 DC dc = {0};
-Geom geoms[];
-Geom *geom = geoms;
 Layout layouts[];
 Layout *lt = layouts;
 Window root, barwin;
@@ -330,14 +315,10 @@ buttonpress(XEvent *e) {
 	XButtonPressedEvent *ev = &e->xbutton;
 
 	if(ev->window == barwin) {
-		if((ev->x < bgw) && ev->button == Button1) {
-			setgeom(NULL);
-			return;
-		}
-		x = bgw;
+		x = 0;
 		for(i = 0; i < LENGTH(tags); i++) {
 			x += textw(tags[i]);
-			if(ev->x >= bgw && ev->x < x) {
+			if(ev->x < x) {
 				if(ev->button == Button1) {
 					if(ev->state & MODKEY)
 						tag(tags[i]);
@@ -440,7 +421,9 @@ configurenotify(XEvent *e) {
 	if(ev->window == root && (ev->width != sw || ev->height != sh)) {
 		sw = ev->width;
 		sh = ev->height;
-		setgeom(geom->symbol);
+		updategeom();
+		updatebar();
+		arrange();
 	}
 }
 
@@ -531,11 +514,6 @@ drawbar(void) {
 	Client *c;
 
 	dc.x = 0;
-	if(bgw > 0) {
-		dc.w = bgw;
-		drawtext(geom->symbol, dc.norm, False);
-		dc.x += bgw;
-	}
 	for(c = stack; c && !isvisible(c, NULL); c = c->snext);
 	for(i = 0; i < LENGTH(tags); i++) {
 		dc.w = textw(tags[i]);
@@ -1064,7 +1042,7 @@ monocle(void) {
 
 	for(c = clients; c; c = c->next)
 		if((lt->isfloating || !c->isfloating) &&  isvisible(c, NULL))
-			resize(c, mox, moy, mow - 2 * c->bw, moh - 2 * c->bw, RESIZEHINTS);
+			resize(c, wx, wy, ww - 2 * c->bw, wh - 2 * c->bw, RESIZEHINTS);
 }
 
 void
@@ -1399,27 +1377,6 @@ setclientstate(Client *c, long state) {
 }
 
 void
-setgeom(const char *arg) {
-	unsigned int 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();
-}
-
-void
 setlayout(const char *arg) {
 	unsigned int i;
 
@@ -1457,7 +1414,8 @@ setmfact(const char *arg) {
 			return;
 		mfact = d;
 	}
-	setgeom(geom->symbol);
+	updategeom();
+	arrange();
 }
 
 void
@@ -1469,15 +1427,14 @@ setup(void) {
 	screen = DefaultScreen(dpy);
 	root = RootWindow(dpy, screen);
 	initfont(FONT);
-
-	/* apply default geometry */
 	sx = 0;
 	sy = 0;
 	sw = DisplayWidth(dpy, screen);
 	sh = DisplayHeight(dpy, screen);
 	bh = dc.font.height + 2;
-	mfact = MFACT;
-	geom->apply();
+
+	/* update geometry */
+	updategeom();
 
 	/* init atoms */
 	wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
@@ -1517,10 +1474,6 @@ setup(void) {
 		w = textw(layouts[i].symbol);
 		blw = MAX(blw, w);
 	}
-	for(bgw = i = 0; LENGTH(geoms) > 1 && i < LENGTH(geoms); i++) {
-		w = textw(geoms[i].symbol);
-		bgw = MAX(bgw, w);
-	}
 
 	wa.override_redirect = 1;
 	wa.background_pixmap = ParentRelative;
@@ -1633,7 +1586,7 @@ tilemaster(unsigned int n) {
 	Client *c = nexttiled(clients);
 
 	if(n == 1)
-		tileresize(c, mox, moy, mow - 2 * c->bw, moh - 2 * c->bw);
+		tileresize(c, wx, wy, ww - 2 * c->bw, wh - 2 * c->bw);
 	else
 		tileresize(c, mx, my, mw - 2 * c->bw, mh - 2 * c->bw);
 	return c;
@@ -1751,7 +1704,7 @@ unmapnotify(XEvent *e) {
 }
 
 void
-updatebarpos(void) {
+updatebar(void) {
 
 	if(dc.drawable != 0)
 		XFreePixmap(dpy, dc.drawable);
@@ -1760,6 +1713,34 @@ updatebarpos(void) {
 }
 
 void
+updategeom(void) {
+
+	/* bar geometry */
+	bx = 0;
+	by = 0;
+	bw = sw;
+
+	/* window area geometry */
+	wx = sx;
+	wy = sy;
+	ww = sw;
+	sh = sh - bh;
+
+	/* master area geometry */
+	mfact = MFACT;
+	mx = wx;
+	my = wy;
+	mw = mfact * ww;
+	mh = wh;
+
+	/* tile area geometry */
+	tx = mx + mw;
+	ty = wy;
+	tw = ww - mw;
+	th = wh;
+}
+
+void
 updatesizehints(Client *c) {
 	long msize;
 	XSizeHints size;
@@ -1912,4 +1893,3 @@ main(int argc, char *argv[]) {
 	XCloseDisplay(dpy);
 	return 0;
 }
-