removed Geom stuff, introduced updategeom() again, still view is somewhat broken?
This commit is contained in:
		
							parent
							
								
									93a4fe1052
								
							
						
					
					
						commit
						7eb26288fc
					
				
							
								
								
									
										12
									
								
								config.def.h
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								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] }, | ||||
|  | ||||
							
								
								
									
										3
									
								
								dwm.1
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								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 | ||||
|  | ||||
							
								
								
									
										122
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										122
									
								
								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 */ | ||||
| @ -96,11 +88,6 @@ typedef struct { | ||||
| 	} font; | ||||
| } DC; /* draw context */ | ||||
| 
 | ||||
| typedef struct { | ||||
| 	const char *symbol; | ||||
| 	void (*apply)(void); | ||||
| } Geom; | ||||
| 
 | ||||
| typedef struct { | ||||
| 	unsigned long mod; | ||||
| 	KeySym keysym; | ||||
| @ -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 | ||||
| @ -1398,27 +1376,6 @@ setclientstate(Client *c, long state) { | ||||
| 			PropModeReplace, (unsigned char *)data, 2); | ||||
| } | ||||
| 
 | ||||
| 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); | ||||
| @ -1759,6 +1712,34 @@ updatebarpos(void) { | ||||
| 	XMoveResizeWindow(dpy, barwin, bx, by, bw, bh); | ||||
| } | ||||
| 
 | ||||
| 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; | ||||
| @ -1912,4 +1893,3 @@ main(int argc, char *argv[]) { | ||||
| 	XCloseDisplay(dpy); | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user