summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2022-09-07 14:42:49 +0100
committerBram Moolenaar <Bram@vim.org>2022-09-07 14:42:49 +0100
commitfd7e60a33ddd83a82da4eb6267f1c12fa926f32b (patch)
tree65aca12a319ab64b541c970786af7015ce8fef16
parentbb6c4073e79e86ef69c315338e00c12f0d8d6395 (diff)
patch 9.0.0403: 'equalalways' may be off when 'laststatus' is zerov9.0.0403
Problem: 'equalalways' may be off when 'laststatus' is zero. Solution: call last_status() before win_equal(). (Luuk van Baal, closes #11070)
-rw-r--r--src/testdir/test_window_cmd.vim15
-rw-r--r--src/version.c2
-rw-r--r--src/window.c14
3 files changed, 25 insertions, 6 deletions
diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim
index 44fd646392..e38c8a8107 100644
--- a/src/testdir/test_window_cmd.vim
+++ b/src/testdir/test_window_cmd.vim
@@ -1617,4 +1617,19 @@ func Test_window_alloc_failure()
tabonly
endfunc
+func Test_win_equal_last_status()
+ let save_lines = &lines
+ set lines=20
+ set splitbelow
+ set laststatus=0
+
+ split | split | quit
+ call assert_equal(winheight(1), winheight(2))
+
+ let &lines = save_lines
+ set splitbelow&
+ set laststatus&
+endfunc
+
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index c06a43cf8e..db1a1dec54 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 403,
+/**/
402,
/**/
401,
diff --git a/src/window.c b/src/window.c
index 36327350bd..ff55a3bf9f 100644
--- a/src/window.c
+++ b/src/window.c
@@ -2712,6 +2712,14 @@ win_close(win_T *win, int free_buf)
// using the window.
check_cursor();
}
+
+ /*
+ * If last window has a status line now and we don't want one, remove the
+ * status line. Do this before win_equal(), because it may change the
+ * height of a window
+ */
+ last_status(FALSE);
+
if (p_ea && (*p_ead == 'b' || *p_ead == dir))
// If the frame of the closed window contains the new current window,
// only resize that frame. Otherwise resize all windows.
@@ -2741,12 +2749,6 @@ win_close(win_T *win, int free_buf)
--dont_parse_messages;
#endif
- /*
- * If last window has a status line now and we don't want one,
- * remove the status line.
- */
- last_status(FALSE);
-
// After closing the help window, try restoring the window layout from
// before it was opened.
if (help_window)