summary refs log tree commit diff
diff options
context:
space:
mode:
authorokan <okan>2011-06-24 06:01:47 +0000
committerokan <okan>2011-06-24 06:01:47 +0000
commitb230e611beebcaab31379f2230b81ab4cf6b890a (patch)
tree1f5afbe4d8ca8b43eb83932e1c59c94dffb87767
parentc566b31bd056677cefe5758095d76eb28c92665e (diff)
downloadcwm-b230e611beebcaab31379f2230b81ab4cf6b890a.tar.gz
cwm-b230e611beebcaab31379f2230b81ab4cf6b890a.tar.xz
cwm-b230e611beebcaab31379f2230b81ab4cf6b890a.zip
re-do various bits of {,h,v}max for simplicity and less flag handling.
as a bonus, flipping between various combinations of vmax+hmax provides
a more predictable behavior.

commitski oga@
-rw-r--r--calmwm.h11
-rw-r--r--client.c41
2 files changed, 18 insertions, 34 deletions
diff --git a/calmwm.h b/calmwm.h
index f5f0156..d6b74f9 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -140,13 +140,10 @@ struct client_ctx {
 	int			 xproto;
 #define CLIENT_HIDDEN			0x0001
 #define CLIENT_IGNORE			0x0002
-#define CLIENT_DOMAXIMIZE		0x0004
-#define CLIENT_MAXIMIZED		0x0008
-#define CLIENT_DOVMAXIMIZE		0x0010
-#define CLIENT_VMAXIMIZED		0x0020
-#define CLIENT_DOHMAXIMIZE		0x0040
-#define CLIENT_HMAXIMIZED		0x0080
-#define CLIENT_FREEZE			0x0100
+#define CLIENT_MAXIMIZED		0x0004
+#define CLIENT_VMAXIMIZED		0x0008
+#define CLIENT_HMAXIMIZED		0x0010
+#define CLIENT_FREEZE			0x0020
 	int			 flags;
 	int			 state;
 	int			 active;
diff --git a/client.c b/client.c
index de6cb1b..49b16c9 100644
--- a/client.c
+++ b/client.c
@@ -283,6 +283,8 @@ client_maximize(struct client_ctx *cc)
 
 	if (cc->flags & CLIENT_MAXIMIZED) {
 		cc->geom = cc->savegeom;
+		cc->bwidth = Conf.bwidth;
+		cc->flags &= ~CLIENT_MAXIMIZED;
 	} else {
 		if (!(cc->flags & (CLIENT_VMAXIMIZED | CLIENT_HMAXIMIZED)))
 			cc->savegeom = cc->geom;
@@ -308,7 +310,8 @@ calc:
 		cc->geom.y = y_org + sc->gap.top;
 		cc->geom.height = ymax - (sc->gap.top + sc->gap.bottom);
 		cc->geom.width = xmax - (sc->gap.left + sc->gap.right);
-		cc->flags |= CLIENT_DOMAXIMIZE;
+		cc->bwidth = 0;
+		cc->flags |= CLIENT_MAXIMIZED;
 	}
 
 	client_resize(cc);
@@ -324,7 +327,10 @@ client_vertmaximize(struct client_ctx *cc)
 		return;
 
 	if (cc->flags & CLIENT_VMAXIMIZED) {
-		cc->geom = cc->savegeom;
+		cc->geom.y = cc->savegeom.y;
+		cc->geom.height = cc->savegeom.height;
+		cc->bwidth = Conf.bwidth;
+		cc->flags &= ~CLIENT_VMAXIMIZED;
 	} else {
 		if (!(cc->flags & (CLIENT_MAXIMIZED | CLIENT_HMAXIMIZED)))
 			cc->savegeom = cc->geom;
@@ -342,7 +348,7 @@ calc:
 		cc->geom.y = y_org + sc->gap.top;
 		cc->geom.height = ymax - (cc->bwidth * 2) - (sc->gap.top +
 		    sc->gap.bottom);
-		cc->flags |= CLIENT_DOVMAXIMIZE;
+		cc->flags |= CLIENT_VMAXIMIZED;
 	}
 
 	client_resize(cc);
@@ -358,7 +364,10 @@ client_horizmaximize(struct client_ctx *cc)
 		return;
 
 	if (cc->flags & CLIENT_HMAXIMIZED) {
-		cc->geom = cc->savegeom;
+		cc->geom.x = cc->savegeom.x;
+		cc->geom.width = cc->savegeom.width;
+		cc->bwidth = Conf.bwidth;
+		cc->flags &= ~CLIENT_HMAXIMIZED;
 	} else {
 		if (!(cc->flags & (CLIENT_MAXIMIZED | CLIENT_VMAXIMIZED)))
 			cc->savegeom = cc->geom;
@@ -376,7 +385,7 @@ calc:
 		cc->geom.x = x_org + sc->gap.left;
 		cc->geom.width = xmax - (cc->bwidth * 2) - (sc->gap.left +
 		    sc->gap.right);
-		cc->flags |= CLIENT_DOHMAXIMIZE;
+		cc->flags |= CLIENT_HMAXIMIZED;
 	}
 
 	client_resize(cc);
@@ -385,23 +394,6 @@ calc:
 void
 client_resize(struct client_ctx *cc)
 {
-	cc->flags &= ~(CLIENT_MAXIMIZED | CLIENT_VMAXIMIZED |
-	    CLIENT_HMAXIMIZED);
-
-	if (cc->flags & CLIENT_DOMAXIMIZE) {
-		cc->bwidth = 0;
-		cc->flags &= ~CLIENT_DOMAXIMIZE;
-		cc->flags |= CLIENT_MAXIMIZED;
-	} else if (cc->flags & CLIENT_DOVMAXIMIZE) {
-		cc->flags &= ~CLIENT_DOVMAXIMIZE;
-		cc->flags |= CLIENT_VMAXIMIZED;
-	} else if (cc->flags & CLIENT_DOHMAXIMIZE) {
-		cc->flags &= ~CLIENT_DOHMAXIMIZE;
-		cc->flags |= CLIENT_HMAXIMIZED;
-	} else {
-		cc->bwidth = Conf.bwidth;
-	}
-
 	client_draw_border(cc);
 
 	XMoveResizeWindow(X_Dpy, cc->win, cc->geom.x,
@@ -412,11 +404,6 @@ client_resize(struct client_ctx *cc)
 void
 client_move(struct client_ctx *cc)
 {
-	if (cc->flags & CLIENT_VMAXIMIZED)
-		cc->savegeom.x = cc->geom.x;
-	if (cc->flags & CLIENT_HMAXIMIZED)
-		cc->savegeom.y = cc->geom.y;
-
 	XMoveWindow(X_Dpy, cc->win, cc->geom.x, cc->geom.y);
 	xu_configure(cc);
 }