]> granicus.if.org Git - vim/commitdiff
patch 8.2.3774: test for command line height fails v8.2.3774
authorBram Moolenaar <Bram@vim.org>
Fri, 10 Dec 2021 13:40:08 +0000 (13:40 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 10 Dec 2021 13:40:08 +0000 (13:40 +0000)
Problem:    Test for command line height fails.
Solution:   Use another way to handle window size change.

src/structs.h
src/version.c
src/window.c

index b8ffbe4a733b19062ab54ab37b0c3f643ca11839..a5850d4391687a3fa73860204a11cfc08daf3421 100644 (file)
@@ -3216,7 +3216,8 @@ struct tabpage_S
     win_T          *tp_first_popupwin; // first popup window in this Tab page
 #endif
     long           tp_old_Rows;    // Rows when Tab page was left
-    long           tp_old_Columns; // Columns when Tab page was left
+    long           tp_old_Columns; // Columns when Tab page was left, -1 when
+                                   // calling shell_new_columns() postponed
     long           tp_ch_used;     // value of 'cmdheight' when frame size
                                    // was set
 #ifdef FEAT_GUI
index 43be175c6eb7d4e59d8d3f4bd8d9f1832b385ac6..79abb50b23d8a6717b00fbe9ee32cba4fb3f3983 100644 (file)
@@ -753,6 +753,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3774,
 /**/
     3773,
 /**/
index 2640db17ead9b59f185b297dbb297326506577fe..44ecdc42e9b9240f061d00577c0370c03d126348 100644 (file)
@@ -4192,7 +4192,8 @@ leave_tabpage(
     tp->tp_firstwin = firstwin;
     tp->tp_lastwin = lastwin;
     tp->tp_old_Rows = Rows;
-    tp->tp_old_Columns = Columns;
+    if (tp->tp_old_Columns != -1)
+       tp->tp_old_Columns = Columns;
     firstwin = NULL;
     lastwin = NULL;
     return OK;
@@ -4255,8 +4256,16 @@ enter_tabpage(
 #endif
                ))
        shell_new_rows();
-    if (curtab->tp_old_Columns != Columns && starting == 0)
-       shell_new_columns();    // update window widths
+    if (curtab->tp_old_Columns != Columns)
+    {
+       if (starting == 0)
+       {
+           shell_new_columns();        // update window widths
+           curtab->tp_old_Columns = Columns;
+       }
+       else
+           curtab->tp_old_Columns = -1;  // update window widths later
+    }
 
     lastused_tabpage = last_tab;
 
@@ -5353,24 +5362,18 @@ win_free_lsize(win_T *wp)
     void
 shell_new_rows(void)
 {
-    tabpage_T  *tp;
+    int                h = (int)ROWS_AVAIL;
 
     if (firstwin == NULL)      // not initialized yet
        return;
+    if (h < frame_minheight(topframe, NULL))
+       h = frame_minheight(topframe, NULL);
 
-    FOR_ALL_TABPAGES(tp)
-    {
-       int             h = (int)ROWS_AVAIL;
-
-       if (h < frame_minheight(tp->tp_topframe, NULL))
-           h = frame_minheight(tp->tp_topframe, NULL);
-
-       // First try setting the heights of windows with 'winfixheight'.  If
-       // that doesn't result in the right height, forget about that option.
-       frame_new_height(tp->tp_topframe, h, FALSE, TRUE);
-       if (!frame_check_height(tp->tp_topframe, h))
-           frame_new_height(tp->tp_topframe, h, FALSE, FALSE);
-    }
+    // First try setting the heights of windows with 'winfixheight'.  If
+    // that doesn't result in the right height, forget about that option.
+    frame_new_height(topframe, h, FALSE, TRUE);
+    if (!frame_check_height(topframe, h))
+       frame_new_height(topframe, h, FALSE, FALSE);
 
     (void)win_comp_pos();              // recompute w_winrow and w_wincol
     compute_cmdrow();
@@ -5389,19 +5392,14 @@ shell_new_rows(void)
     void
 shell_new_columns(void)
 {
-    tabpage_T  *tp;
-
     if (firstwin == NULL)      // not initialized yet
        return;
 
-    FOR_ALL_TABPAGES(tp)
-    {
-       // First try setting the widths of windows with 'winfixwidth'.  If that
-       // doesn't result in the right width, forget about that option.
-       frame_new_width(tp->tp_topframe, (int)Columns, FALSE, TRUE);
-       if (!frame_check_width(tp->tp_topframe, Columns))
-           frame_new_width(tp->tp_topframe, (int)Columns, FALSE, FALSE);
-    }
+    // First try setting the widths of windows with 'winfixwidth'.  If that
+    // doesn't result in the right width, forget about that option.
+    frame_new_width(topframe, (int)Columns, FALSE, TRUE);
+    if (!frame_check_width(topframe, Columns))
+       frame_new_width(topframe, (int)Columns, FALSE, FALSE);
 
     (void)win_comp_pos();              // recompute w_winrow and w_wincol
 #if 0