aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2024-05-20 20:21:11 +0200
committerLuuk van Baal <luukvbaal@gmail.com>2024-07-20 14:53:42 +0200
commit89f9f168a5c4317bcc71cb61e64a1dd63d17a377 (patch)
tree299e83d911e629ea5837343218300502c714698d /src
parent5fc25ecc7a383a4bed2199774ed2e26022456ca3 (diff)
downloadrneovim-89f9f168a5c4317bcc71cb61e64a1dd63d17a377.tar.gz
rneovim-89f9f168a5c4317bcc71cb61e64a1dd63d17a377.tar.bz2
rneovim-89f9f168a5c4317bcc71cb61e64a1dd63d17a377.zip
fix(api): alloc and draw cursor window in nvim__redraw
Problem: Unable to move cursor to recently opened window. Solution: Make sure uninitialized window is drawn before trying to move the cursor to it.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/api/vim.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index 26dc223948..7a4aefc620 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -2393,10 +2393,6 @@ void nvim__redraw(Dict(redraw) *opts, Error *err)
redraw_buf_range_later(rbuf, first, last);
}
- if (opts->cursor) {
- setcursor_mayforce(win ? win : curwin, true);
- }
-
bool flush = opts->flush;
if (opts->tabline) {
// Flush later in case tabline was just hidden or shown for the first time.
@@ -2423,11 +2419,22 @@ void nvim__redraw(Dict(redraw) *opts, Error *err)
}
}
- // Flush pending screen updates if "flush" or "clear" is true, or when
- // redrawing a status component may have changed the grid dimensions.
+ win_T *cwin = win ? win : curwin;
+ // Allow moving cursor to recently opened window and make sure it is drawn #28868.
+ if (opts->cursor && (!cwin->w_grid.target || !cwin->w_grid.target->valid)) {
+ flush = true;
+ }
+
+ // Redraw pending screen updates when explicitly requested or when determined
+ // that it is necessary to properly draw other requested components.
if (flush && !cmdpreview) {
update_screen();
}
+
+ if (opts->cursor) {
+ setcursor_mayforce(cwin, true);
+ }
+
ui_flush();
RedrawingDisabled = save_rd;