diff options
author | Luuk van Baal <luukvbaal@gmail.com> | 2024-05-20 20:21:11 +0200 |
---|---|---|
committer | Luuk van Baal <luukvbaal@gmail.com> | 2024-07-20 14:53:42 +0200 |
commit | 89f9f168a5c4317bcc71cb61e64a1dd63d17a377 (patch) | |
tree | 299e83d911e629ea5837343218300502c714698d /src | |
parent | 5fc25ecc7a383a4bed2199774ed2e26022456ca3 (diff) | |
download | rneovim-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.c | 19 |
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; |