(svn r558) -Fix: [ 1065247 ] Windows can be placed behind toolbar
authortron
Sat, 13 Nov 2004 10:53:42 +0000
changeset 370 687b13abdf0c
parent 369 ab2266938fa8
child 371 bcbc6fb59c26
(svn r558) -Fix: [ 1065247 ] Windows can be placed behind toolbar
While here make clamping against the screen border a bit nicer
window.c
--- a/window.c	Fri Nov 12 23:59:51 2004 +0000
+++ b/window.c	Sat Nov 13 10:53:42 2004 +0000
@@ -701,6 +701,7 @@
 	// Otherwise find the window...
 	for (w = _windows; w != _last_window; w++) {
 		if (w->flags4 & WF_DRAGGING) {
+			const Widget *t = &w->widget[1]; // the title bar ... ugh
 			const Window *v;
 			int x;
 			int y;
@@ -796,9 +797,34 @@
 
 			// Make sure the window doesn't leave the screen
 			// 13 is the height of the title bar
-			nx = clamp(nx, 13 - w->width, _screen.width - 13);
+			nx = clamp(nx, 13 - t->right, _screen.width - 13 - t->left);
 			ny = clamp(ny, 0, _screen.height - 13);
 
+			// Make sure the title bar isn't hidden by behind the main tool bar
+			v = FindWindowById(WC_MAIN_TOOLBAR, 0);
+			if (v != NULL) {
+				int v_bottom = v->top + v->height;
+				int v_right = v->left + v->width;
+				if (ny + t->top >= v->top && ny + t->top < v_bottom) {
+					if (v->left < 13 && nx + t->left < v->left) {
+						ny = v_bottom;
+					} else if (v_right > _screen.width - 13 &&
+							nx + t->right > v_right) {
+						ny = v_bottom;
+					} else {
+						if (nx + t->left > v->left - 13 &&
+								nx + t->right < v_right + 13) {
+							if (w->top >= v_bottom)
+								ny = v_bottom;
+							else if (w->left < nx)
+								nx = v->left - 13 - t->left;
+							else
+								nx = v_right + 13 - t->right;
+						}
+					}
+				}
+			}
+
 			if (w->viewport != NULL) {
 				w->viewport->left += nx - w->left;
 				w->viewport->top  += ny - w->top;