changeset 5284:7ed1ec814daf v7.4b.018

updated for version 7.4b.018 Problem: Win32: Dialog can still be too big. Solution: Move the check for height further down. (Andrei Olsen)
author Bram Moolenaar <bram@vim.org>
date Wed, 07 Aug 2013 15:27:11 +0200
parents 08a7a7143d69
children a1cf2af83e79
files src/gui_w32.c src/version.c
diffstat 2 files changed, 20 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -3184,9 +3184,8 @@ gui_mch_dialog(
     }
     else
     {
-	/* Use our own window's client area for the size, unless it's very
-	 * small. */
-	GetClientRect(s_hwnd, &rect);
+	/* Use our own window for the size, unless it's very small. */
+	GetWindowRect(s_hwnd, &rect);
 	maxDialogWidth = rect.right - rect.left
 				   - (GetSystemMetrics(SM_CXFRAME) +
                                       GetSystemMetrics(SM_CXPADDEDBORDER)) * 2;
@@ -3195,7 +3194,8 @@ gui_mch_dialog(
 
 	maxDialogHeight = rect.bottom - rect.top
 				   - (GetSystemMetrics(SM_CYFRAME) +
-                                      GetSystemMetrics(SM_CXPADDEDBORDER)) * 4;
+                                      GetSystemMetrics(SM_CXPADDEDBORDER)) * 4
+				   - GetSystemMetrics(SM_CYCAPTION);
 	if (maxDialogHeight < DLG_MIN_MAX_HEIGHT)
 	    maxDialogHeight = DLG_MIN_MAX_HEIGHT;
     }
@@ -3262,16 +3262,9 @@ gui_mch_dialog(
 
     messageWidth += 10;		/* roundoff space */
 
-    /* Restrict the size to a maximum.  Causes a scrollbar to show up. */
-    if (msgheight > maxDialogHeight)
-    {
-	msgheight = maxDialogHeight;
-	scroll_flag = WS_VSCROLL;
-	messageWidth += GetSystemMetrics(SM_CXVSCROLL);
-    }
-
     /* Add width of icon to dlgwidth, and some space */
-    dlgwidth = messageWidth + DLG_ICON_WIDTH + 3 * dlgPaddingX;
+    dlgwidth = messageWidth + DLG_ICON_WIDTH + 3 * dlgPaddingX
+					     + GetSystemMetrics(SM_CXVSCROLL);
 
     if (msgheight < DLG_ICON_HEIGHT)
 	msgheight = DLG_ICON_HEIGHT;
@@ -3345,8 +3338,8 @@ gui_mch_dialog(
 
     // Dialog height.
     if (vertical)
-	dlgheight = msgheight + 2 * dlgPaddingY +
-			      DLG_VERT_PADDING_Y + 2 * fontHeight * numButtons;
+	dlgheight = msgheight + 2 * dlgPaddingY
+			   + DLG_VERT_PADDING_Y + 2 * fontHeight * numButtons;
     else
 	dlgheight = msgheight + 3 * dlgPaddingY + 2 * fontHeight;
 
@@ -3355,6 +3348,16 @@ gui_mch_dialog(
     if (textfield != NULL)
 	dlgheight += editboxheight;
 
+    /* Restrict the size to a maximum.  Causes a scrollbar to show up. */
+    if (dlgheight > maxDialogHeight)
+    {
+        msgheight = msgheight - (dlgheight - maxDialogHeight);
+        dlgheight = maxDialogHeight;
+        scroll_flag = WS_VSCROLL;
+        /* Make sure scrollbar doesn't appear in the middle of the dialog */
+        messageWidth = dlgwidth - DLG_ICON_WIDTH - 3 * dlgPaddingX;
+    }
+
     add_word(PixelToDialogY(dlgheight));
 
     add_word(0);	// Menu
--- a/src/version.c
+++ b/src/version.c
@@ -728,6 +728,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    18,
+/**/
     17,
 /**/
     16,