diff options
| author | Anselm R Garbe <garbeam@gmail.com> | 2008-10-19 12:59:18 +0100 | 
|---|---|---|
| committer | Anselm R Garbe <garbeam@gmail.com> | 2008-10-19 12:59:18 +0100 | 
| commit | ea8a4ca46a9577997e0a3f30e211c644477c6a00 (patch) | |
| tree | 3fe28522c91d99ce560474ef858636b693f80eb1 | |
| parent | 4883a062216fa7fca0d4b6250478cf53ce1210f0 (diff) | |
| download | dwm-ea8a4ca46a9577997e0a3f30e211c644477c6a00.tar.gz | |
several changes towards 5.3, XINERAMA is disabled by default, introduced usegrab Bool for grabbing the server during mouse-based resizals/movements (disabled by default), continued debugging tile() with resizehints == True and a lot of terminals supporting resizehints, still no optimal solution, I need to think about it, considering recursive algorithm for the space optimization
| -rw-r--r-- | config.def.h | 2 | ||||
| -rw-r--r-- | config.mk | 8 | ||||
| -rw-r--r-- | dwm.c | 28 | 
3 files changed, 26 insertions, 12 deletions
| diff --git a/config.def.h b/config.def.h index 706cfa9..7c19b2f 100644 --- a/config.def.h +++ b/config.def.h @@ -13,6 +13,8 @@ static unsigned int snap            = 32;       /* snap pixel */  static Bool showbar                 = True;     /* False means no bar */  static Bool topbar                  = True;     /* False means bottom bar */  static Bool readin                  = True;     /* False means do not read stdin */ +static Bool usegrab                 = False;    /* True means grabbing the X server +                                                   during mouse-based resizals */  /* tagging */  static const char tags[][MAXTAGLEN] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; @@ -1,5 +1,5 @@  # dwm version -VERSION = 5.2 +VERSION = 5.3  # Customize below to fit your system @@ -10,9 +10,9 @@ MANPREFIX = ${PREFIX}/share/man  X11INC = /usr/X11R6/include  X11LIB = /usr/X11R6/lib -# Xinerama, comment if you don't want it -XINERAMALIBS = -L${X11LIB} -lXinerama -XINERAMAFLAGS = -DXINERAMA +# Xinerama, un-comment if you want it +#XINERAMALIBS = -L${X11LIB} -lXinerama +#XINERAMAFLAGS = -DXINERAMA  # includes and libs  INCS = -I. -I/usr/include -I${X11INC} @@ -53,8 +53,8 @@  #define MIN(a, b)               ((a) < (b) ? (a) : (b))  #define MAXTAGLEN               16  #define MOUSEMASK               (BUTTONMASK|PointerMotionMask) -#define WIDTH(x)                ((x)->w + 2*(x)->bw) -#define HEIGHT(x)               ((x)->h + 2*(x)->bw) +#define WIDTH(x)                ((x)->w + 2 * (x)->bw) +#define HEIGHT(x)               ((x)->h + 2 * (x)->bw)  #define TAGMASK                 ((int)((1LL << LENGTH(tags)) - 1))  #define TEXTW(x)                (textnw(x, strlen(x)) + dc.font.height) @@ -932,7 +932,7 @@ monocle(void) {  	Client *c;  	for(c = nexttiled(clients); c; c = nexttiled(c->next)) -		resize(c, wx, wy, ww - 2*c->bw, wh - 2*c->bw, resizehints); +		resize(c, wx, wy, ww - 2 * c->bw, wh - 2 * c->bw, resizehints);  }  void @@ -952,6 +952,8 @@ movemouse(const Arg *arg) {  	None, cursor[CurMove], CurrentTime) != GrabSuccess)  		return;  	XQueryPointer(dpy, root, &dummy, &dummy, &x, &y, &di, &di, &dui); +	if(usegrab) +		XGrabServer(dpy);  	do {  		XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);  		switch (ev.type) { @@ -961,7 +963,6 @@ movemouse(const Arg *arg) {  			handler[ev.type](&ev);  			break;  		case MotionNotify: -			XSync(dpy, False);  			nx = ocx + (ev.xmotion.x - x);  			ny = ocy + (ev.xmotion.y - y);  			if(snap && nx >= wx && nx <= wx + ww @@ -983,6 +984,8 @@ movemouse(const Arg *arg) {  		}  	}  	while(ev.type != ButtonRelease); +	if(usegrab) +		XUngrabServer(dpy);  	XUngrabPointer(dpy, CurrentTime);  } @@ -1121,6 +1124,8 @@ resizemouse(const Arg *arg) {  	None, cursor[CurResize], CurrentTime) != GrabSuccess)  		return;  	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); +	if(usegrab) +		XGrabServer(dpy);  	do {  		XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev);  		switch(ev.type) { @@ -1130,7 +1135,6 @@ resizemouse(const Arg *arg) {  			handler[ev.type](&ev);  			break;  		case MotionNotify: -			XSync(dpy, False);  			nw = MAX(ev.xmotion.x - ocx - 2*c->bw + 1, 1);  			nh = MAX(ev.xmotion.y - ocy - 2*c->bw + 1, 1); @@ -1146,6 +1150,8 @@ resizemouse(const Arg *arg) {  		}  	}  	while(ev.type != ButtonRelease); +	if(usegrab) +		XUngrabServer(dpy);  	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1);  	XUngrabPointer(dpy, CurrentTime);  	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); @@ -1435,7 +1441,7 @@ tile(void) {  	/* master */  	c = nexttiled(clients);  	mw = mfact * ww; -	resize(c, wx, wy, (n == 1 ? ww : mw) - 2*c->bw, wh - 2*c->bw, resizehints); +	resize(c, wx, wy, (n == 1 ? ww : mw) - 2 * c->bw, wh - 2 * c->bw, resizehints);  	if(--n == 0)  		return; @@ -1449,8 +1455,14 @@ tile(void) {  		h = wh;  	for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) { -		resize(c, x, y, w - 2*c->bw, /* remainder */ ((i + 1 == n) -		       ? wy + wh - y : h) - 2*c->bw, resizehints); +		if(i + 1 == n) { /* remainder */ +			if(wy + wh - y < bh) +				resize(c, x, y, w - 2 * c->bw, wy + wh - y - 2 * c->bw, False); +			else +				resize(c, x, y, w - 2 * c->bw, wy + wh - y - 2 * c->bw, resizehints); +		} +		else +			resize(c, x, y, w - 2 * c->bw, h - 2 * c->bw, resizehints);  		if(h != wh)  			y = c->y + HEIGHT(c);  	} | 
