diff --git a/src/nvim/api/win_config.c b/src/nvim/api/win_config.c index f03e6e1eab..33d80246a3 100644 --- a/src/nvim/api/win_config.c +++ b/src/nvim/api/win_config.c @@ -235,8 +235,9 @@ Window nvim_open_win(Buffer buffer, Boolean enter, Dict(win_config) *config, Err win_T *wp = NULL; tabpage_T *tp = curtab; - win_T *parent = NULL; - if (config->win != -1) { + assert(curwin != NULL); + win_T *parent = config->win == 0 ? curwin : NULL; + if (config->win > 0) { parent = find_window_by_handle(fconfig.window, err); if (!parent) { // find_window_by_handle has already set the error @@ -408,8 +409,8 @@ void nvim_win_set_config(Window window, Dict(win_config) *config, Error *err) if (!parse_win_config(win, config, &fconfig, !was_split || to_split, err)) { return; } - win_T *parent = NULL; - if (config->win != -1) { + win_T *parent = config->win == 0 ? curwin : NULL; + if (config->win > 0) { parent = find_window_by_handle(fconfig.window, err); if (!parent) { return; @@ -1193,8 +1194,6 @@ 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 0f70b6366e..d2837dcf85 100644 --- a/test/functional/ui/float_spec.lua +++ b/test/functional/ui/float_spec.lua @@ -388,7 +388,11 @@ describe('float window', function() row = 1, }) eq(1001, api.nvim_win_get_config(winid).win) + -- But unrelated config doesn't clear parent win #34286 + api.nvim_win_set_config(winid, { title = 'foo' }) + eq(1001, api.nvim_win_get_config(winid).win) command('close') + api.nvim_win_set_config(winid, { title = 'bar' }) api.nvim_win_set_config(winid, { relative = 'editor', row = 1, col = 1 }) eq(nil, api.nvim_win_get_config(winid).win) end)