summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-12-10 12:11:09 +0000
committerBram Moolenaar <Bram@vim.org>2021-12-10 12:11:09 +0000
commit8a7374f8c4eb4c016270ad908a43af4ddedcbf56 (patch)
tree4080428eeff72daf30c91ebed0a83f04adceff76
parentff39a650b2bd31e30d1bb8766e8560f9a14a7137 (diff)
patch 8.2.3773: wrong window size when a modeline changes 'columns'v8.2.3773
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)
-rw-r--r--src/version.c2
-rw-r--r--src/window.c37
2 files changed, 26 insertions, 13 deletions
diff --git a/src/version.c b/src/version.c
index a598b6b140..43be175c6e 100644
--- 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 */
/**/
+ 3773,
+/**/
3772,
/**/
3771,
diff --git a/src/window.c b/src/window.c
index b54813f4ff..2640db17ea 100644
--- a/src/window.c
+++ b/src/window.c
@@ -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