1
0
forked from aniani/vim

patch 8.2.3773: wrong window size when a modeline changes 'columns'

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)
This commit is contained in:
Bram Moolenaar
2021-12-10 12:11:09 +00:00
parent ff39a650b2
commit 8a7374f8c4
2 changed files with 26 additions and 13 deletions

View File

@@ -753,6 +753,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
3773,
/**/ /**/
3772, 3772,
/**/ /**/

View File

@@ -5353,18 +5353,24 @@ win_free_lsize(win_T *wp)
void void
shell_new_rows(void) shell_new_rows(void)
{ {
int h = (int)ROWS_AVAIL; tabpage_T *tp;
if (firstwin == NULL) // not initialized yet if (firstwin == NULL) // not initialized yet
return; 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 // First try setting the heights of windows with 'winfixheight'. If
// that doesn't result in the right height, forget about that option. // that doesn't result in the right height, forget about that option.
frame_new_height(topframe, h, FALSE, TRUE); frame_new_height(tp->tp_topframe, h, FALSE, TRUE);
if (!frame_check_height(topframe, h)) if (!frame_check_height(tp->tp_topframe, h))
frame_new_height(topframe, h, FALSE, FALSE); frame_new_height(tp->tp_topframe, h, FALSE, FALSE);
}
(void)win_comp_pos(); // recompute w_winrow and w_wincol (void)win_comp_pos(); // recompute w_winrow and w_wincol
compute_cmdrow(); compute_cmdrow();
@@ -5383,14 +5389,19 @@ shell_new_rows(void)
void void
shell_new_columns(void) shell_new_columns(void)
{ {
tabpage_T *tp;
if (firstwin == NULL) // not initialized yet if (firstwin == NULL) // not initialized yet
return; return;
FOR_ALL_TABPAGES(tp)
{
// First try setting the widths of windows with 'winfixwidth'. If that // First try setting the widths of windows with 'winfixwidth'. If that
// doesn't result in the right width, forget about that option. // doesn't result in the right width, forget about that option.
frame_new_width(topframe, (int)Columns, FALSE, TRUE); frame_new_width(tp->tp_topframe, (int)Columns, FALSE, TRUE);
if (!frame_check_width(topframe, Columns)) if (!frame_check_width(tp->tp_topframe, Columns))
frame_new_width(topframe, (int)Columns, FALSE, FALSE); frame_new_width(tp->tp_topframe, (int)Columns, FALSE, FALSE);
}
(void)win_comp_pos(); // recompute w_winrow and w_wincol (void)win_comp_pos(); // recompute w_winrow and w_wincol
#if 0 #if 0