diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-09-14 07:42:22 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-14 07:42:22 +0800 |
commit | f5953edbac14febce9d4f8a3c35bdec1eae26fbe (patch) | |
tree | 72bc0cbe71e5b61324bd010147c8c6c402c5c0de /src | |
parent | 77df96f3fb9475a58330d4ad8830217e5de806c8 (diff) | |
download | rneovim-f5953edbac14febce9d4f8a3c35bdec1eae26fbe.tar.gz rneovim-f5953edbac14febce9d4f8a3c35bdec1eae26fbe.tar.bz2 rneovim-f5953edbac14febce9d4f8a3c35bdec1eae26fbe.zip |
fix(float): update position of anchored windows first (#25133)
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/window.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c index a615bd6797..c0d399c4c4 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -965,7 +965,13 @@ void ui_ext_win_position(win_T *wp, bool validate) if (c.relative == kFloatRelativeWindow) { Error dummy = ERROR_INIT; win_T *win = find_window_by_handle(c.window, &dummy); - if (win) { + api_clear_error(&dummy); + if (win != NULL) { + // When a floating window is anchored to another window, + // update the position of its anchored window first. + if (win->w_pos_changed && win->w_grid_alloc.chars != NULL && win_valid(win)) { + ui_ext_win_position(win, validate); + } grid = &win->w_grid; int row_off = 0, col_off = 0; grid_adjust(&grid, &row_off, &col_off); @@ -979,7 +985,6 @@ void ui_ext_win_position(win_T *wp, bool validate) col += tcol - 1; } } - api_clear_error(&dummy); } wp->w_grid_alloc.zindex = wp->w_float_config.zindex; |