removed Geom stuff, introduced updategeom() again, still view is somewhat broken? 7eb26288
Anselm R Garbe · 2008-05-11 20:20 3 file(s) · +52 −85
config.def.h +1 −11
18 18
	{ "Gimp",	NULL,		NULL,		NULL,		True },
19 19
};
20 20
21 -
/* geometries, s{x,y,w,h} and bh are already initualized here */
22 -
/*   func name  bx  by  bw  wx  wy  ww     wh  mx  my       mw  mh     tx  ty     tw  th  mox moy mow moh */
21 +
/* layout(s) */
23 22
#define MFACT			0.55	/* master width factor [0.1 .. 0.9] */
24 -
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)
25 -
26 -
Geom geoms[] = {
27 -
	/* symbol	function */
28 -
	{ "[]",		single },	/* first entry is default */
29 -
};
30 -
31 -
/* layout(s) */
32 23
#define RESIZEHINTS		True	/* False - respect size hints in tiled resizals */
33 24
#define SNAP			32	/* snap pixel */
34 25
58 49
	{ MODKEY|ShiftMask,		XK_c,		killclient,	NULL },
59 50
	{ MODKEY,			XK_space,	setlayout,	NULL },
60 51
	{ MODKEY|ShiftMask,		XK_space,	togglefloating,	NULL },
61 -
	{ MODKEY|ControlMask,		XK_space,	setgeom,	NULL },
62 52
	{ MODKEY,			XK_0,		view,		NULL },
63 53
	{ MODKEY,			XK_1,		view,		tags[0] },
64 54
	{ MODKEY,			XK_2,		view,		tags[1] },
dwm.1 +0 −3
60 60
.B Mod1\-space
61 61
Toggles between layouts.
62 62
.TP
63 -
.B Mod1\-Control\-space
64 -
Toggles between geometries.
65 -
.TP
66 63
.B Mod1\-j
67 64
Focus next window.
68 65
.TP
dwm.c +51 −71
41 41
#include <X11/Xutil.h>
42 42
43 43
/* macros */
44 -
#define MAX(a, b) ((a)>(b)?(a):(b))
45 -
#define MIN(a, b) ((a)<(b)?(a):(b))
46 -
#define BUTTONMASK		(ButtonPressMask|ButtonReleaseMask)
47 -
#define CLEANMASK(mask)		(mask & ~(numlockmask|LockMask))
48 -
#define LENGTH(x)		(sizeof x / sizeof x[0])
49 -
#define MAXTAGLEN		16
50 -
#define MOUSEMASK		(BUTTONMASK|PointerMotionMask)
51 -
#define DEFGEOM(GEONAME,BX,BY,BW,WX,WY,WW,WH,MX,MY,MW,MH,TX,TY,TW,TH,MOX,MOY,MOW,MOH) \
52 -
void GEONAME(void) { \
53 -
	bx = (BX); by = (BY); bw = (BW); \
54 -
	wx = (WX); wy = (WY); ww = (WW); wh = (WH); \
55 -
	mx = (MX); my = (MY); mw = (MW); mh = (MH); \
56 -
	tx = (TX); ty = (TY); tw = (TW); th = (TH); \
57 -
	mox = (MOX); moy = (MOY); mow = (MOW); moh = (MOH); \
58 -
}
44 +
#define MAX(a, b)	((a) > (b) ? (a) : (b))
45 +
#define MIN(a, b)	((a) < (b) ? (a) : (b))
46 +
#define BUTTONMASK	(ButtonPressMask|ButtonReleaseMask)
47 +
#define CLEANMASK(mask)	(mask & ~(numlockmask|LockMask))
48 +
#define LENGTH(x)	(sizeof x / sizeof x[0])
49 +
#define MAXTAGLEN	16
50 +
#define MOUSEMASK	(BUTTONMASK|PointerMotionMask)
59 51
60 52
/* enums */
61 53
enum { CurNormal, CurResize, CurMove, CurLast };	/* cursor */
95 87
		XFontStruct *xfont;
96 88
	} font;
97 89
} DC; /* draw context */
98 -
99 -
typedef struct {
100 -
	const char *symbol;
101 -
	void (*apply)(void);
102 -
} Geom;
103 90
104 91
typedef struct {
105 92
	unsigned long mod;
178 165
void run(void);
179 166
void scan(void);
180 167
void setclientstate(Client *c, long state);
181 -
void setgeom(const char *arg);
182 168
void setlayout(const char *arg);
183 169
void setmfact(const char *arg);
184 170
void setup(void);
198 184
void unban(Client *c);
199 185
void unmanage(Client *c);
200 186
void unmapnotify(XEvent *e);
201 -
void updatebarpos(void);
187 +
void updatebar(void);
188 +
void updategeom(void);
202 189
void updatesizehints(Client *c);
203 190
void updatetitle(Client *c);
204 191
void updatewmhints(Client *c);
213 200
char stext[256];
214 201
int screen, sx, sy, sw, sh;
215 202
int (*xerrorxlib)(Display *, XErrorEvent *);
216 -
int bx, by, bw, bh, blw, bgw, mx, my, mw, mh, mox, moy, mow, moh, tx, ty, tw, th, wx, wy, ww, wh;
203 +
int bx, by, bw, bh, blw, mx, my, mw, mh, tx, ty, tw, th, wx, wy, ww, wh;
217 204
int seltags = 0;
218 205
double mfact;
219 206
unsigned int numlockmask = 0;
241 228
Cursor cursor[CurLast];
242 229
Display *dpy;
243 230
DC dc = {0};
244 -
Geom geoms[];
245 -
Geom *geom = geoms;
246 231
Layout layouts[];
247 232
Layout *lt = layouts;
248 233
Window root, barwin;
330 315
	XButtonPressedEvent *ev = &e->xbutton;
331 316
332 317
	if(ev->window == barwin) {
333 -
		if((ev->x < bgw) && ev->button == Button1) {
334 -
			setgeom(NULL);
335 -
			return;
336 -
		}
337 -
		x = bgw;
318 +
		x = 0;
338 319
		for(i = 0; i < LENGTH(tags); i++) {
339 320
			x += textw(tags[i]);
340 -
			if(ev->x >= bgw && ev->x < x) {
321 +
			if(ev->x < x) {
341 322
				if(ev->button == Button1) {
342 323
					if(ev->state & MODKEY)
343 324
						tag(tags[i]);
440 421
	if(ev->window == root && (ev->width != sw || ev->height != sh)) {
441 422
		sw = ev->width;
442 423
		sh = ev->height;
443 -
		setgeom(geom->symbol);
424 +
		updategeom();
425 +
		updatebar();
426 +
		arrange();
444 427
	}
445 428
}
446 429
531 514
	Client *c;
532 515
533 516
	dc.x = 0;
534 -
	if(bgw > 0) {
535 -
		dc.w = bgw;
536 -
		drawtext(geom->symbol, dc.norm, False);
537 -
		dc.x += bgw;
538 -
	}
539 517
	for(c = stack; c && !isvisible(c, NULL); c = c->snext);
540 518
	for(i = 0; i < LENGTH(tags); i++) {
541 519
		dc.w = textw(tags[i]);
1064 1042
1065 1043
	for(c = clients; c; c = c->next)
1066 1044
		if((lt->isfloating || !c->isfloating) &&  isvisible(c, NULL))
1067 -
			resize(c, mox, moy, mow - 2 * c->bw, moh - 2 * c->bw, RESIZEHINTS);
1045 +
			resize(c, wx, wy, ww - 2 * c->bw, wh - 2 * c->bw, RESIZEHINTS);
1068 1046
}
1069 1047
1070 1048
void
1399 1377
}
1400 1378
1401 1379
void
1402 -
setgeom(const char *arg) {
1403 -
	unsigned int i;
1404 -
1405 -
	if(!arg) {
1406 -
		if(++geom == &geoms[LENGTH(geoms)])
1407 -
			geom = &geoms[0];
1408 -
	}
1409 -
	else {
1410 -
		for(i = 0; i < LENGTH(geoms); i++)
1411 -
			if(!strcmp(geoms[i].symbol, arg))
1412 -
				break;
1413 -
		if(i == LENGTH(geoms))
1414 -
			return;
1415 -
		geom = &geoms[i];
1416 -
	}
1417 -
	geom->apply();
1418 -
	updatebarpos();
1419 -
	arrange();
1420 -
}
1421 -
1422 -
void
1423 1380
setlayout(const char *arg) {
1424 1381
	unsigned int i;
1425 1382
1457 1414
			return;
1458 1415
		mfact = d;
1459 1416
	}
1460 -
	setgeom(geom->symbol);
1417 +
	updategeom();
1418 +
	arrange();
1461 1419
}
1462 1420
1463 1421
void
1469 1427
	screen = DefaultScreen(dpy);
1470 1428
	root = RootWindow(dpy, screen);
1471 1429
	initfont(FONT);
1472 -
1473 -
	/* apply default geometry */
1474 1430
	sx = 0;
1475 1431
	sy = 0;
1476 1432
	sw = DisplayWidth(dpy, screen);
1477 1433
	sh = DisplayHeight(dpy, screen);
1478 1434
	bh = dc.font.height + 2;
1479 -
	mfact = MFACT;
1480 -
	geom->apply();
1435 +
1436 +
	/* update geometry */
1437 +
	updategeom();
1481 1438
1482 1439
	/* init atoms */
1483 1440
	wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);
1517 1474
		w = textw(layouts[i].symbol);
1518 1475
		blw = MAX(blw, w);
1519 1476
	}
1520 -
	for(bgw = i = 0; LENGTH(geoms) > 1 && i < LENGTH(geoms); i++) {
1521 -
		w = textw(geoms[i].symbol);
1522 -
		bgw = MAX(bgw, w);
1523 -
	}
1524 1477
1525 1478
	wa.override_redirect = 1;
1526 1479
	wa.background_pixmap = ParentRelative;
1633 1586
	Client *c = nexttiled(clients);
1634 1587
1635 1588
	if(n == 1)
1636 -
		tileresize(c, mox, moy, mow - 2 * c->bw, moh - 2 * c->bw);
1589 +
		tileresize(c, wx, wy, ww - 2 * c->bw, wh - 2 * c->bw);
1637 1590
	else
1638 1591
		tileresize(c, mx, my, mw - 2 * c->bw, mh - 2 * c->bw);
1639 1592
	return c;
1751 1704
}
1752 1705
1753 1706
void
1754 -
updatebarpos(void) {
1707 +
updatebar(void) {
1755 1708
1756 1709
	if(dc.drawable != 0)
1757 1710
		XFreePixmap(dpy, dc.drawable);
1758 1711
	dc.drawable = XCreatePixmap(dpy, root, bw, bh, DefaultDepth(dpy, screen));
1759 1712
	XMoveResizeWindow(dpy, barwin, bx, by, bw, bh);
1713 +
}
1714 +
1715 +
void
1716 +
updategeom(void) {
1717 +
1718 +
	/* bar geometry */
1719 +
	bx = 0;
1720 +
	by = 0;
1721 +
	bw = sw;
1722 +
1723 +
	/* window area geometry */
1724 +
	wx = sx;
1725 +
	wy = sy;
1726 +
	ww = sw;
1727 +
	sh = sh - bh;
1728 +
1729 +
	/* master area geometry */
1730 +
	mfact = MFACT;
1731 +
	mx = wx;
1732 +
	my = wy;
1733 +
	mw = mfact * ww;
1734 +
	mh = wh;
1735 +
1736 +
	/* tile area geometry */
1737 +
	tx = mx + mw;
1738 +
	ty = wy;
1739 +
	tw = ww - mw;
1740 +
	th = wh;
1760 1741
}
1761 1742
1762 1743
void
1912 1893
	XCloseDisplay(dpy);
1913 1894
	return 0;
1914 1895
}
1915 -