changeset 16009:54736dda61b4 draft

(svn r20697) -Fix [FS#4084]: call the new function after resizing a window so it's not possible a window becomes unmoveable
author yexo <yexo@openttd.org>
date Mon, 30 Aug 2010 14:52:28 +0000
parents 588d81e211a8
children e398886a4060
files src/window.cpp
diffstat 1 files changed, 20 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -1549,23 +1549,24 @@
 	/* Search for the title bar rectangle. */
 	Rect caption_rect;
 	const NWidgetBase *caption = w->nested_root->GetWidgetOfType(WWT_CAPTION);
-	assert(caption != NULL);
-	caption_rect.left   = caption->pos_x;
-	caption_rect.right  = caption->pos_x + caption->current_x;
-	caption_rect.top    = caption->pos_y;
-	caption_rect.bottom = caption->pos_y + caption->current_y;
-
-	/* Make sure the window doesn't leave the screen */
-	nx = Clamp(nx, MIN_VISIBLE_TITLE_BAR - caption_rect.right, _screen.width - MIN_VISIBLE_TITLE_BAR - caption_rect.left);
-	ny = Clamp(ny, 0, _screen.height - MIN_VISIBLE_TITLE_BAR);
-
-	/* Make sure the title bar isn't hidden behind the main tool bar or the status bar. */
-	PreventHiding(&nx, &ny, caption_rect, FindWindowById(WC_MAIN_TOOLBAR, 0), w->left, PHD_DOWN);
-	PreventHiding(&nx, &ny, caption_rect, FindWindowById(WC_STATUS_BAR,   0), w->left, PHD_UP);
-
-	if (w->viewport != NULL) {
-		w->viewport->left += nx - w->left;
-		w->viewport->top  += ny - w->top;
+	if (caption != NULL) {
+		caption_rect.left   = caption->pos_x;
+		caption_rect.right  = caption->pos_x + caption->current_x;
+		caption_rect.top    = caption->pos_y;
+		caption_rect.bottom = caption->pos_y + caption->current_y;
+
+		/* Make sure the window doesn't leave the screen */
+		nx = Clamp(nx, MIN_VISIBLE_TITLE_BAR - caption_rect.right, _screen.width - MIN_VISIBLE_TITLE_BAR - caption_rect.left);
+		ny = Clamp(ny, 0, _screen.height - MIN_VISIBLE_TITLE_BAR);
+
+		/* Make sure the title bar isn't hidden behind the main tool bar or the status bar. */
+		PreventHiding(&nx, &ny, caption_rect, FindWindowById(WC_MAIN_TOOLBAR, 0), w->left, PHD_DOWN);
+		PreventHiding(&nx, &ny, caption_rect, FindWindowById(WC_STATUS_BAR,   0), w->left, PHD_UP);
+
+		if (w->viewport != NULL) {
+			w->viewport->left += nx - w->left;
+			w->viewport->top  += ny - w->top;
+		}
 	}
 	w->left = nx;
 	w->top  = ny;
@@ -1595,6 +1596,8 @@
 		w->height = w->nested_root->current_y;
 	}
 
+	EnsureVisibleCaption(w, w->left, w->top);
+
 	/* Always call OnResize to make sure everything is initialised correctly if it needs to be. */
 	w->OnResize();
 	w->SetDirty();