From 0d66963089f4b088c309dc26574bcac6c312b140 Mon Sep 17 00:00:00 2001 From: luukvbaal Date: Mon, 2 Jun 2025 14:59:19 +0200 Subject: [PATCH] fix(api): reconfiguring float "relative" does not clear "win" (#34271) Problem: Unable to change the "relative" of a flag after its target "win" no longer exists. Solution: Unset target window if it is not present in config and reconfigured "relative" no longer expects a target window. (cherry picked from commit 963308439a5dff5a55b837c74d0a50c2c069ae23) --- src/nvim/api/win_config.c | 2 ++ test/functional/ui/float_spec.lua | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/nvim/api/win_config.c b/src/nvim/api/win_config.c index 57c3f4daab..f03e6e1eab 100644 --- a/src/nvim/api/win_config.c +++ b/src/nvim/api/win_config.c @@ -1193,6 +1193,8 @@ static bool parse_win_config(win_T *wp, Dict(win_config) *config, WinConfig *fco "non-float with 'win' requires at least 'split' or 'vertical'"); goto fail; } + } else { + fconfig->window = 0; } if (HAS_KEY_X(config, external)) { diff --git a/test/functional/ui/float_spec.lua b/test/functional/ui/float_spec.lua index a05aa8bd38..0f70b6366e 100644 --- a/test/functional/ui/float_spec.lua +++ b/test/functional/ui/float_spec.lua @@ -378,6 +378,21 @@ describe('float window', function() ) end) + it('no error message when reconfig relative field on closed win', function() + command('split') + local winid = api.nvim_open_win(0, false, { + relative = 'win', + width = 1, + height = 1, + col = 1, + row = 1, + }) + eq(1001, api.nvim_win_get_config(winid).win) + command('close') + api.nvim_win_set_config(winid, { relative = 'editor', row = 1, col = 1 }) + eq(nil, api.nvim_win_get_config(winid).win) + end) + it('is not operated on by windo when non-focusable #15374', function() command([[ let winids = []