]> granicus.if.org Git - vim/commitdiff
patch 8.0.1334: splitting a window with a WinBar damages window layout v8.0.1334
authorBram Moolenaar <Bram@vim.org>
Sat, 25 Nov 2017 13:19:43 +0000 (14:19 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 25 Nov 2017 13:19:43 +0000 (14:19 +0100)
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().

src/version.c
src/vim.h
src/window.c

index dc29e3d763e65a7d1158aad08d10dbbaac46cd4e..408b85cd429179c78ca8bb52ba5ac9b16da82a16 100644 (file)
@@ -771,6 +771,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1334,
 /**/
     1333,
 /**/
index 96bab71cff19299865a90bc1bebd68d1b57d341e..83ffb293f440e77282574cfe25851356daa3110f 100644 (file)
--- 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 */
 
 /*
index 7bc3b9f48985e800d46cc6dae630c61d8d879c5e..7d58c8a60dd523eeae671dd738b34ecffa5f9730 100644 (file)
@@ -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) ;
 }
 
 /*