aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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