aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-09-14 07:42:22 +0800
committerGitHub <noreply@github.com>2023-09-14 07:42:22 +0800
commitf5953edbac14febce9d4f8a3c35bdec1eae26fbe (patch)
tree72bc0cbe71e5b61324bd010147c8c6c402c5c0de /src
parent77df96f3fb9475a58330d4ad8830217e5de806c8 (diff)
downloadrneovim-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.c9
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;