changeset 26488:06aa56b32df4 v8.2.3774

patch 8.2.3774: test for command line height fails Commit: https://github.com/vim/vim/commit/b711814cb64b60ec4918e3e1fb2ca5c50d6e9340 Author: Bram Moolenaar <Bram@vim.org> Date: Fri Dec 10 13:40:08 2021 +0000 patch 8.2.3774: test for command line height fails Problem: Test for command line height fails. Solution: Use another way to handle window size change.
author Bram Moolenaar <Bram@vim.org>
date Fri, 10 Dec 2021 14:45:03 +0100
parents 24b0a8540cf4
children f19d8c077771
files src/structs.h src/version.c src/window.c
diffstat 3 files changed, 30 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/src/structs.h
+++ b/src/structs.h
@@ -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
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3774,
+/**/
     3773,
 /**/
     3772,
--- a/src/window.c
+++ b/src/window.c
@@ -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;
-
-    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);
-    }
+    if (h < frame_minheight(topframe, NULL))
+	h = frame_minheight(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(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