client.c
changeset 124 75576e44c1d8
parent 123 61490330e90a
child 127 1480e19f6377
--- a/client.c	Thu Jul 20 12:18:06 2006 +0200
+++ b/client.c	Thu Jul 20 15:07:35 2006 +0200
@@ -70,6 +70,9 @@
 	if(!sel)
 		return;
 
+	if(sel->ismax)
+		togglemax(NULL);
+
 	if(!(c = getnext(sel->next, tsel)))
 		c = getnext(clients, tsel);
 	if(c) {
@@ -87,6 +90,9 @@
 	if(!sel)
 		return;
 
+	if(sel->ismax)
+		togglemax(NULL);
+
 	if((c = sel->revert && sel->revert->tags[tsel] ? sel->revert : NULL)) {
 		higher(c);
 		focus(c);
@@ -234,8 +240,6 @@
 	c->next = clients;
 	clients = c;
 
-	XGrabButton(dpy, Button1, ControlMask, c->win, False, ButtonPressMask,
-			GrabModeAsync, GrabModeSync, None, None);
 	XGrabButton(dpy, Button1, MODKEY, c->win, False, ButtonPressMask,
 			GrabModeAsync, GrabModeSync, None, None);
 	XGrabButton(dpy, Button2, MODKEY, c->win, False, ButtonPressMask,
@@ -264,19 +268,6 @@
 }
 
 void
-maximize(Arg *arg)
-{
-	if(!sel)
-		return;
-	sel->x = sx;
-	sel->y = sy + bh;
-	sel->w = sw - 2 * sel->border;
-	sel->h = sh - 2 * sel->border - bh;
-	higher(sel);
-	resize(sel, False, TopLeft);
-}
-
-void
 pop(Client *c)
 {
 	Client **l;
@@ -405,6 +396,38 @@
 }
 
 void
+togglemax(Arg *arg)
+{
+	int ox, oy, ow, oh;
+	XEvent ev;
+
+	if(!sel)
+		return;
+
+	if((sel->ismax = !sel->ismax)) {
+		ox = sel->x;
+		oy = sel->y;
+		ow = sel->w;
+		oh = sel->h;
+		sel->x = sx;
+		sel->y = sy + bh;
+		sel->w = sw - 2 * sel->border;
+		sel->h = sh - 2 * sel->border - bh;
+
+		higher(sel);
+		resize(sel, False, TopLeft);
+
+		sel->x = ox;
+		sel->y = oy;
+		sel->w = ow;
+		sel->h = oh;
+	}
+	else
+		resize(sel, False, TopLeft);
+	while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
+}
+
+void
 unmanage(Client *c)
 {
 	Client **l;