commit e4ecfe1cb08465af78a932e5cd53e81589754f94
parent 594b9f508d6b4d0c52b007714dbf8f89d28ffea4
Author: Kris Maglione <kris@suckless.org>
Date:   Sat, 17 Sep 2011 17:58:32 -0400
Merge.
Diffstat:
3 files changed, 47 insertions(+), 30 deletions(-)
diff --git a/cmd/wmii/float.c b/cmd/wmii/float.c
@@ -74,7 +74,8 @@ float_arrange(Area *a) {
 		break;
 	case Colstack:
 		for(f=a->frame; f; f=f->anext)
-			f->collapsed = (f != a->sel);
+			f->collapsed = !(f->client->w.ewmh.type & (TypeDock|TypeMenu|TypeToolbar))
+				    && (f != a->sel);
 		break;
 	default:
 		die("not reached");
@@ -162,12 +163,14 @@ float_placeframe(Frame *f) {
 	Vector_rect *vp;
 	Rectangle r;
 	Point dim, p;
+	Area *a, *sel;
 	Client *c;
 	Frame *ff;
-	Area *a, *sel;
+	View *v;
 	long area, l;
 	int i, s;
 
+	v = f->view;
 	a = f->area;
 	c = f->client;
 
@@ -212,7 +215,11 @@ float_placeframe(Frame *f) {
 			s = sel->screen;
 	}
 
-	r = s == -1 ? a->r : screens[s]->r;
+	if (s == -1)
+		r = a->r;
+	else
+		r = v->r[s];
+
 	vp = unique_rects(&vec, r);
 
 	area = LONG_MAX;
diff --git a/cmd/wmii/mouse.c b/cmd/wmii/mouse.c
@@ -223,7 +223,7 @@ readmotion(Point *p) {
 
 static void
 mouse_resizecolframe(Frame *f, Align align) {
-	Window *cwin, *hwin;
+	Window *cwin, *hwin = nil;
 	Divide *d;
 	View *v;
 	Area *a;
@@ -245,7 +245,7 @@ mouse_resizecolframe(Frame *f, Align align) {
 		d = d->next;
 	}
 
-	if(align&East)
+	if(align & East)
 		d = d->next;
 
 	min.x = column_minwidth();
@@ -263,72 +263,82 @@ mouse_resizecolframe(Frame *f, Align align) {
 			r.rmax.xy = r.rmin.xy plus 1;                \
 		})
 
+	r = f->r;
 	if(align & North)
 		frob(f->aprev, f, aprev, min, max, +, -, y, false);
-	else
+	else if(align & South)
 		frob(f->anext, f, anext, max, min, -, +, y, false);
 	if(align & West)
 		frob(a->prev,  a, prev,  min, max, +, -, x, true);
-	else
+	else if(align & East)
 		frob(a->next,  a, next,  max, min, -, +, x, true);
 #undef frob
 
 	cwin = constraintwin(r);
 
 	r = f->r;
-	if(align&North)
+	if(align & North)
 		r.min.y--;
-	else
+	else if(align & South)
 		r.min.y = r.max.y - 1;
 	r.max.y = r.min.y + 2;
 
-	hwin = gethsep(r);
+	if(align & (North|South))
+		hwin = gethsep(r);
 
 	if(!grabpointer(&scr.root, cwin, cursor[CurSizing], MouseMask))
 		goto done;
 
-	pt.x = ((align&West) ? f->r.min.x : f->r.max.x);
-	pt.y = ((align&North) ? f->r.min.y : f->r.max.y);
+	pt.x = (align & West ? f->r.min.x : f->r.max.x);
+	pt.y = (align & North ? f->r.min.y : f->r.max.y);
 	warppointer(pt);
 
 	while(readmotion(&pt)) {
-		if(align&West)
+		if(align & West)
 			r.min.x = pt.x;
-		else
+		else if(align & East)
 			r.max.x = pt.x;
-		r.min.y = ((align&South) ? pt.y : pt.y-1);
+
+		if(align & South)
+			r.min.y = pt.y;
+		else if(align & North)
+			r.min.y = pt.y - 1;
 		r.max.y = r.min.y+2;
 
-		div_set(d, pt.x);
-		reshapewin(hwin, r);
+		if(align & (East|West))
+			div_set(d, pt.x);
+		if(hwin)
+			reshapewin(hwin, r);
 	}
 
 	r = f->r;
-	if(align&West)
+	if(align & West)
 		r.min.x = pt.x;
-	else
+	else if(align & East)
 		r.max.x = pt.x;
-	if(align&North)
+	if(align & North)
 		r.min.y = pt.y;
-	else
+	else if(align & South)
 		r.max.y = pt.y;
 	column_resizeframe(f, r);
 
 	/* XXX: Magic number... */
-	if(align&West)
+	if(align & West)
 		pt.x = f->r.min.x + 4;
-	else
+	else if(align & East)
 		pt.x = f->r.max.x - 4;
-	if(align&North)
+
+	if(align & North)
 		pt.y = f->r.min.y + 4;
-	else
+	else if(align & South)
 		pt.y = f->r.max.y - 4;
 	warppointer(pt);
 
 done:
 	ungrabpointer();
 	destroyconstraintwin(cwin);
-	destroywindow(hwin);
+	if (hwin)
+		destroywindow(hwin);
 }
 
 void
diff --git a/lib/libstuff/geom/quadrant.c b/lib/libstuff/geom/quadrant.c
@@ -8,10 +8,10 @@ quadrant(Rectangle r, Point pt) {
 	Align ret;
 
 	pt = subpt(pt, r.min);
-	ret = East  * (pt.x >= Dx(r) * .5)
-	    | West  * (pt.x <  Dx(r) * .5)
-	    | South * (pt.y >= Dy(r) * .5)
-	    | North * (pt.y <  Dy(r) * .5);
+	ret = East  * (pt.x >= Dx(r) * .7)
+	    | West  * (pt.x <= Dx(r) * .3)
+	    | South * (pt.y >= Dy(r) * .7)
+	    | North * (pt.y <= Dy(r) * .3);
 
 	return ret;
 }