aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotomo <notomo.motono@gmail.com>2021-08-23 07:27:20 +0900
committerGitHub <noreply@github.com>2021-08-22 15:27:20 -0700
commit90b2da16ae1aadc070183a0eeb237dddd0cd21b8 (patch)
treecb1f2837420ec01b08262ac581221d9d1431f08a
parentda5d023c97d7e156bc9e264cc9d8a9f473b9bba6 (diff)
downloadrneovim-90b2da16ae1aadc070183a0eeb237dddd0cd21b8.tar.gz
rneovim-90b2da16ae1aadc070183a0eeb237dddd0cd21b8.tar.bz2
rneovim-90b2da16ae1aadc070183a0eeb237dddd0cd21b8.zip
fix(window.c): win_close from other tabpage #15454
Fix #15313
-rw-r--r--src/nvim/window.c6
-rw-r--r--test/functional/api/window_spec.lua15
2 files changed, 20 insertions, 1 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c
index f0faeac2d7..eddbe14da2 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -2709,7 +2709,11 @@ static win_T *win_free_mem(
// When deleting the current window of another tab page select a new
// current window.
if (tp != NULL && win == tp->tp_curwin) {
- tp->tp_curwin = wp;
+ if (win_valid(tp->tp_prevwin) && tp->tp_prevwin != win) {
+ tp->tp_curwin = tp->tp_prevwin;
+ } else {
+ tp->tp_curwin = tp->tp_firstwin;
+ }
}
return wp;
diff --git a/test/functional/api/window_spec.lua b/test/functional/api/window_spec.lua
index e4aa1dae8e..c49d6405f4 100644
--- a/test/functional/api/window_spec.lua
+++ b/test/functional/api/window_spec.lua
@@ -347,6 +347,21 @@ describe('API/win', function()
eq(2, #meths.list_wins())
eq('', funcs.getcmdwintype())
end)
+
+ it('closing current (float) window of another tabpage #15313', function()
+ command('tabedit')
+ eq(2, eval('tabpagenr()'))
+ local win = meths.open_win(0, true, {
+ relative='editor', row=10, col=10, width=50, height=10
+ })
+ local tabpage = eval('tabpagenr()')
+ command('tabprevious')
+ eq(1, eval('tabpagenr()'))
+ meths.win_close(win, false)
+
+ eq(1001, meths.tabpage_get_win(tabpage).id)
+ helpers.assert_alive()
+ end)
end)
describe('hide', function()