]> granicus.if.org Git - vim/commitdiff
updated for version 7.4.377 v7.4.377
authorBram Moolenaar <Bram@vim.org>
Wed, 23 Jul 2014 13:21:20 +0000 (15:21 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 23 Jul 2014 13:21:20 +0000 (15:21 +0200)
Problem:    When 'equalalways' is set a split may report "no room" even though
            there is plenty of room.
Solution:   Compute the available room properly. (Yukihiro Nakadaira)

src/version.c
src/window.c

index 47248ee4b0b2706243b6f21d7b3c0490b65f2176..c0b0c3581c86afc63548ac4ceb9ad63b2d120b8d 100644 (file)
@@ -734,6 +734,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    377,
 /**/
     376,
 /**/
index f81f5527b52a4d145ee8586e26fec571d59a52af..1cf861b476bb555c3c0f472e6ae6802752a7faaa 100644 (file)
@@ -684,7 +684,7 @@ win_split_ins(size, flags, new_wp, dir)
     int                available;
     int                oldwin_height = 0;
     int                layout;
-    frame_T    *frp, *curfrp;
+    frame_T    *frp, *curfrp, *frp2, *prevfrp;
     int                before;
     int                minheight;
     int                wmh1;
@@ -730,12 +730,29 @@ win_split_ins(size, flags, new_wp, dir)
        needed = wmw1 + 1;
        if (flags & WSP_ROOM)
            needed += p_wiw - wmw1;
-       if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
+       if (flags & (WSP_BOT | WSP_TOP))
        {
            minwidth = frame_minwidth(topframe, NOWIN);
            available = topframe->fr_width;
            needed += minwidth;
        }
+       else if (p_ea)
+       {
+           minwidth = frame_minwidth(oldwin->w_frame, NOWIN);
+           prevfrp = oldwin->w_frame;
+           for (frp = oldwin->w_frame->fr_parent; frp != NULL;
+                                                       frp = frp->fr_parent)
+           {
+               if (frp->fr_layout == FR_ROW)
+                   for (frp2 = frp->fr_child; frp2 != NULL;
+                                                       frp2 = frp2->fr_next)
+                       if (frp2 != prevfrp)
+                           minwidth += frame_minwidth(frp2, NOWIN);
+               prevfrp = frp;
+           }
+           available = topframe->fr_width;
+           needed += minwidth;
+       }
        else
        {
            minwidth = frame_minwidth(oldwin->w_frame, NOWIN);
@@ -798,12 +815,29 @@ win_split_ins(size, flags, new_wp, dir)
        needed = wmh1 + STATUS_HEIGHT;
        if (flags & WSP_ROOM)
            needed += p_wh - wmh1;
-       if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
+       if (flags & (WSP_BOT | WSP_TOP))
        {
            minheight = frame_minheight(topframe, NOWIN) + need_status;
            available = topframe->fr_height;
            needed += minheight;
        }
+       else if (p_ea)
+       {
+           minheight = frame_minheight(oldwin->w_frame, NOWIN) + need_status;
+           prevfrp = oldwin->w_frame;
+           for (frp = oldwin->w_frame->fr_parent; frp != NULL;
+                                                       frp = frp->fr_parent)
+           {
+               if (frp->fr_layout == FR_COL)
+                   for (frp2 = frp->fr_child; frp2 != NULL;
+                                                       frp2 = frp2->fr_next)
+                       if (frp2 != prevfrp)
+                           minheight += frame_minheight(frp2, NOWIN);
+               prevfrp = frp;
+           }
+           available = topframe->fr_height;
+           needed += minheight;
+       }
        else
        {
            minheight = frame_minheight(oldwin->w_frame, NOWIN) + need_status;