fix(api): open_win fire Buf* events when !enter && !noautocmd if entered early

Problem: if switch_win{_noblock} fails to restore the old curwin after WinNew
(e.g: it was closed), wp will become the new curwin, but win_set_buf enter
events would still be blocked if !enter && !noautocmd.

Solution: fire them, as we've actually entered the new window.

Note: there's a problem of switch_win{_noblock} failing to restore the old
curwin, leaving us in wp without triggering WinEnter/WinLeave, but this affects
all callers of switch_win{_noblock} anyways. (It's also not clear how WinLeave
can be called if the old curwin was closed already).
This commit is contained in:
Sean Dewar
2024-02-11 18:45:56 +00:00
committed by Sean Dewar
parent a873f33993
commit e55a502ed4
2 changed files with 11 additions and 1 deletions

View File

@@ -294,7 +294,7 @@ Window nvim_open_win(Buffer buffer, Boolean enter, Dict(win_config) *config, Err
tp = win_find_tabpage(wp);
}
if (tp && buf != wp->w_buffer) {
const bool noautocmd = !enter || fconfig.noautocmd;
const bool noautocmd = curwin != wp || fconfig.noautocmd;
win_set_buf(wp, buf, noautocmd, err);
if (!noautocmd) {
tp = win_find_tabpage(wp);