fix(api): adjust fix for reconfiguring float "relative" (#34287)

Problem:  "win" is cleared in float config after 96330843, even with
          unchanged "relative".
Solution: Don't clear "win". Avoid erroring for deleted "win" by setting
          the parent win to curwin directly when "win" is zero or not
          present in config.
(cherry picked from commit eeacd7bd71)
This commit is contained in:
luukvbaal
2025-06-03 13:27:07 +02:00
committed by github-actions[bot]
parent 222b3d5021
commit aa6136f956
2 changed files with 9 additions and 6 deletions

View File

@ -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)) {

View File

@ -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)