aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-09-29 18:38:17 +0800
committerGitHub <noreply@github.com>2024-09-29 10:38:17 +0000
commitdf915f3afccb2717bc62e7b8649d76885cc3916c (patch)
tree4cf6a5a14b94dab27664aabe1da23a376a20c73d
parent006323dd70ca417f7ad1e79d9ab660d54028dec1 (diff)
downloadrneovim-df915f3afccb2717bc62e7b8649d76885cc3916c.tar.gz
rneovim-df915f3afccb2717bc62e7b8649d76885cc3916c.tar.bz2
rneovim-df915f3afccb2717bc62e7b8649d76885cc3916c.zip
fix(float): properly find last window of tabpage (#30571)
-rw-r--r--src/nvim/winfloat.c2
-rw-r--r--test/functional/ui/float_spec.lua16
2 files changed, 17 insertions, 1 deletions
diff --git a/src/nvim/winfloat.c b/src/nvim/winfloat.c
index f7e9128599..fdb65ad614 100644
--- a/src/nvim/winfloat.c
+++ b/src/nvim/winfloat.c
@@ -59,7 +59,7 @@ win_T *win_new_float(win_T *wp, bool last, WinConfig fconfig, Error *err)
if (!tp) {
return NULL;
}
- tp_last = tp->tp_lastwin;
+ tp_last = tp == curtab ? lastwin : tp->tp_lastwin;
while (tp_last->w_floating && tp_last->w_prev) {
tp_last = tp_last->w_prev;
}
diff --git a/test/functional/ui/float_spec.lua b/test/functional/ui/float_spec.lua
index b2ed5f5a5f..9b77cb4014 100644
--- a/test/functional/ui/float_spec.lua
+++ b/test/functional/ui/float_spec.lua
@@ -662,6 +662,22 @@ describe('float window', function()
screen:detach()
end)
+ it('no crash with relative="win" after %bdelete #30569', function()
+ exec([[
+ botright vsplit
+ %bdelete
+ ]])
+ api.nvim_open_win(0, false, {
+ relative = 'win',
+ win = 0,
+ row = 0,
+ col = 5,
+ width = 5,
+ height = 5,
+ })
+ assert_alive()
+ end)
+
describe('with only one tabpage,', function()
local float_opts = {relative = 'editor', row = 1, col = 1, width = 1, height = 1}
local old_buf, old_win