# HG changeset patch # User Bram Moolenaar # Date 1639138502 -3600 # Node ID 8d598308f113ea43ac9b25c5cd056aa8e6baa724 # Parent 9091abdf53632ea3a2330bea957578d106f47d0d patch 8.2.3773: wrong window size when a modeline changes 'columns' Commit: https://github.com/vim/vim/commit/8a7374f8c4eb4c016270ad908a43af4ddedcbf56 Author: Bram Moolenaar Date: Fri Dec 10 12:11:09 2021 +0000 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) diff --git a/src/version.c b/src/version.c --- 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 --- 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