about summary refs log tree commit diff
path: root/kbfunc.c
diff options
context:
space:
mode:
authoroga <oga>2008-06-25 00:52:47 +0000
committeroga <oga>2008-06-25 00:52:47 +0000
commit187e7dfad2e4cbd46b608b36a8ec654739731edd (patch)
treeaba7eb4b4297ff87a8042ab199ace064665e3833 /kbfunc.c
parent6f1ed5bfe3c924c603eae6a0f436dcc9494dd5f0 (diff)
downloadcwm-187e7dfad2e4cbd46b608b36a8ec654739731edd.tar.gz
cwm-187e7dfad2e4cbd46b608b36a8ec654739731edd.tar.xz
cwm-187e7dfad2e4cbd46b608b36a8ec654739731edd.zip
Stop keyboard move moving the window utterly off the screen. If that
happens there's no way to get it back.  Also, stop resize making a
windows size negative or zero. X does not like that one bit.

Diff from Martynas. Ok okan@.
Diffstat (limited to 'kbfunc.c')
-rw-r--r--kbfunc.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/kbfunc.c b/kbfunc.c
index f92efa1..afea8aa 100644
--- a/kbfunc.c
+++ b/kbfunc.c
@@ -77,7 +77,17 @@ kbfunc_moveresize(struct client_ctx *cc, void *arg)
 	switch (flags & typemask) {
 	case CWM_MOVE:
 		cc->geom.y += my;
+		if (cc->geom.y + cc->geom.height < 0)
+			cc->geom.y = -cc->geom.height;
+		if (cc->geom.y > cc->sc->ymax)
+			cc->geom.y = cc->sc->ymax;
+
 		cc->geom.x += mx;
+		if (cc->geom.x + cc->geom.width < 0)
+			cc->geom.x = -cc->geom.width;
+		if (cc->geom.x > cc->sc->xmax)
+			cc->geom.x = cc->sc->xmax;
+
 		client_move(cc);
 		xu_ptr_getpos(cc->pwin, &x, &y);
 		cc->ptr.y = y + my;
@@ -85,8 +95,10 @@ kbfunc_moveresize(struct client_ctx *cc, void *arg)
 		client_ptrwarp(cc);
 		break;
 	case CWM_RESIZE:
-		cc->geom.height += my;
-		cc->geom.width += mx;
+		if ((cc->geom.height += my) < 1)
+			cc->geom.height = 1;
+		if ((cc->geom.width += mx) < 1)
+			cc->geom.width = 1;
 		client_resize(cc);
 
 		/* Make sure the pointer stays within the window. */