diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-10-27 20:37:35 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-10-27 20:37:35 +0100 |
commit | 1c329c04be2e95a3589a53f2978926e91b450cca (patch) | |
tree | 339efc67b38eb018df704b57e1d83690ace16e32 /src/window.c | |
parent | 5b418992cf254137fde2a14d7066fbea5afddb28 (diff) | |
download | vim-git-1c329c04be2e95a3589a53f2978926e91b450cca.tar.gz |
patch 8.1.2227: layout wrong if 'lines' changes while cmdline window is openv8.1.2227
Problem: Layout wrong if 'lines' changes while cmdline window is open.
Solution: Do not restore the window layout if 'lines' changed.
(closes #5130)
Diffstat (limited to 'src/window.c')
-rw-r--r-- | src/window.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/window.c b/src/window.c index 8bb3269a0..abdbd5079 100644 --- a/src/window.c +++ b/src/window.c @@ -5177,17 +5177,23 @@ win_size_save(garray_T *gap) win_T *wp; ga_init2(gap, (int)sizeof(int), 1); - if (ga_grow(gap, win_count() * 2) == OK) + if (ga_grow(gap, win_count() * 2 + 1) == OK) + { + // first entry is value of 'lines' + ((int *)gap->ga_data)[gap->ga_len++] = Rows; + FOR_ALL_WINDOWS(wp) { ((int *)gap->ga_data)[gap->ga_len++] = wp->w_width + wp->w_vsep_width; ((int *)gap->ga_data)[gap->ga_len++] = wp->w_height; } + } } /* - * Restore window sizes, but only if the number of windows is still the same. + * Restore window sizes, but only if the number of windows is still the same + * and 'lines' didn't change. * Does not free the growarray. */ void @@ -5196,13 +5202,14 @@ win_size_restore(garray_T *gap) win_T *wp; int i, j; - if (win_count() * 2 == gap->ga_len) + if (win_count() * 2 + 1 == gap->ga_len + && ((int *)gap->ga_data)[0] == Rows) { /* The order matters, because frames contain other frames, but it's * difficult to get right. The easy way out is to do it twice. */ for (j = 0; j < 2; ++j) { - i = 0; + i = 1; FOR_ALL_WINDOWS(wp) { frame_setwidth(wp->w_frame, ((int *)gap->ga_data)[i++]); @@ -6374,7 +6381,7 @@ min_rows(void) } /* - * Return TRUE if there is only one window (in the current tab page), not + * Return TRUE if there is only one window and only one tab page, not * counting a help or preview window, unless it is the current window. * Does not count unlisted windows. */ |