changeset 12916:af2e0401eb8c v8.0.1334

patch 8.0.1334: splitting a window with a WinBar damages window layout commit https://github.com/vim/vim/commit/3167c3e7010ac7e2fd7d3aa198dd2d1dcff8ecc8 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Nov 25 14:19:43 2017 +0100 patch 8.0.1334: splitting a window with a WinBar damages window layout Problem: Splitting a window with a WinBar damages window layout. (Lifepillar) Solution: Take the winbar into account when computing the new window position. Add WINBAR_HEIGHT().
author Christian Brabandt <cb@256bit.org>
date Sat, 25 Nov 2017 14:30:05 +0100
parents 2b9a459263e2
children f4f2426f5a01
files src/version.c src/vim.h src/window.c
diffstat 3 files changed, 14 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1334,
+/**/
     1333,
 /**/
     1332,
--- a/src/vim.h
+++ b/src/vim.h
@@ -1485,6 +1485,11 @@ typedef UINT32_TYPEDEF UINT32_T;
 #define MIN_COLUMNS	12	/* minimal columns for screen */
 #define MIN_LINES	2	/* minimal lines for screen */
 #define STATUS_HEIGHT	1	/* height of a status line under a window */
+#ifdef FEAT_MENU		/* height of a status line under a window */
+# define WINBAR_HEIGHT(wp)	(wp)->w_winbar_height
+#else
+# define WINBAR_HEIGHT(wp)	0
+#endif
 #define QF_WINHEIGHT	10	/* default height for quickfix window */
 
 /*
--- a/src/window.c
+++ b/src/window.c
@@ -1098,21 +1098,14 @@ win_split_ins(
 	    /* set height and row of new window to full height */
 	    wp->w_winrow = tabline_height();
 	    win_new_height(wp, curfrp->fr_height - (p_ls > 0)
-#ifdef FEAT_MENU
-		    - wp->w_winbar_height
-#endif
-		    );
+							  - WINBAR_HEIGHT(wp));
 	    wp->w_status_height = (p_ls > 0);
 	}
 	else
 	{
 	    /* height and row of new window is same as current window */
 	    wp->w_winrow = oldwin->w_winrow;
-	    win_new_height(wp, oldwin->w_height
-#ifdef FEAT_MENU
-		    + oldwin->w_winbar_height
-#endif
-		    );
+	    win_new_height(wp, oldwin->w_height + WINBAR_HEIGHT(oldwin));
 	    wp->w_status_height = oldwin->w_status_height;
 	}
 	frp->fr_height = curfrp->fr_height;
@@ -1171,10 +1164,7 @@ win_split_ins(
 	if (flags & (WSP_TOP | WSP_BOT))
 	{
 	    int new_fr_height = curfrp->fr_height - new_size
-#ifdef FEAT_MENU
-		+ wp->w_winbar_height
-#endif
-		;
+							  + WINBAR_HEIGHT(wp) ;
 
 	    if (!((flags & WSP_BOT) && p_ls == 0))
 		new_fr_height -= STATUS_HEIGHT;
@@ -1190,7 +1180,8 @@ win_split_ins(
 	}
 	else		/* new window below current one */
 	{
-	    wp->w_winrow = oldwin->w_winrow + oldwin->w_height + STATUS_HEIGHT;
+	    wp->w_winrow = oldwin->w_winrow + oldwin->w_height
+				       + STATUS_HEIGHT + WINBAR_HEIGHT(oldwin);
 	    wp->w_status_height = oldwin->w_status_height;
 	    if (!(flags & WSP_BOT))
 		oldwin->w_status_height = STATUS_HEIGHT;
@@ -2867,10 +2858,7 @@ frame_new_height(
 	/* Simple case: just one window. */
 	win_new_height(topfrp->fr_win,
 				    height - topfrp->fr_win->w_status_height
-#ifdef FEAT_MENU
-				    - topfrp->fr_win->w_winbar_height
-#endif
-				    );
+					      - WINBAR_HEIGHT(topfrp->fr_win));
     }
     else if (topfrp->fr_layout == FR_ROW)
     {
@@ -3217,10 +3205,7 @@ frame_fix_width(win_T *wp)
 frame_fix_height(win_T *wp)
 {
     wp->w_frame->fr_height = wp->w_height + wp->w_status_height
-#ifdef FEAT_MENU
-	+ wp->w_winbar_height
-#endif
-	;
+							  + WINBAR_HEIGHT(wp) ;
 }
 
 /*