]> granicus.if.org Git - vim/commitdiff
patch 8.2.3773: wrong window size when a modeline changes 'columns' v8.2.3773
authorBram Moolenaar <Bram@vim.org>
Fri, 10 Dec 2021 12:11:09 +0000 (12:11 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 10 Dec 2021 12:11:09 +0000 (12:11 +0000)
Problem:    Wrong window size when a modeline changes 'columns' and there is
            more than one tabpage. (Michael Soyka)
Solution:   Adjust the frames of all tabpages. (closes #9315)

src/version.c
src/window.c

index a598b6b140660f68cdc754a4097b38fa6530393f..43be175c6eb7d4e59d8d3f4bd8d9f1832b385ac6 100644 (file)
@@ -753,6 +753,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3773,
 /**/
     3772,
 /**/
index b54813f4fffcfb5353e2b3bd3315a23782dfa133..2640db17ead9b59f185b297dbb297326506577fe 100644 (file)
@@ -5353,18 +5353,24 @@ win_free_lsize(win_T *wp)
     void
 shell_new_rows(void)
 {
-    int                h = (int)ROWS_AVAIL;
+    tabpage_T  *tp;
 
     if (firstwin == NULL)      // not initialized yet
        return;
-    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);
+    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);
+    }
 
     (void)win_comp_pos();              // recompute w_winrow and w_wincol
     compute_cmdrow();
@@ -5383,14 +5389,19 @@ shell_new_rows(void)
     void
 shell_new_columns(void)
 {
+    tabpage_T  *tp;
+
     if (firstwin == NULL)      // not initialized yet
        return;
 
-    // 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);
+    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);
+    }
 
     (void)win_comp_pos();              // recompute w_winrow and w_wincol
 #if 0