From: Yasuhiro Matsumoto Date: Wed, 29 Apr 2026 15:58:42 +0000 (+0000) Subject: patch 9.2.0414: Flicker when drawing window separator and pum is shown X-Git-Tag: v9.2.0414^0 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=458fed4f65668b0c6d97b46669bb3aceb8b6422f;p=thirdparty%2Fvim.git patch 9.2.0414: Flicker when drawing window separator and pum is shown Problem: In a vertical split where the pum overlaps the windows vsep column, background draws (vsep at cursor row, status line, redraw_vseps, idle ins_redraw) can write into cells that are covered by the pum, because skip_for_popup() only protects those cells while pum_will_redraw is set. Solution: In skip_for_popup(), also skip cells under a visible pum when the current draw is not the pum itself (screen_zindex POPUPMENU_ZINDEX). Exclude the wildmenu pum (MODE_CMDLINE): while the cmdline grows, pum_row is briefly stale and protecting those cells would blank a cell of the wrapped cmdline row (Yasuhiro Matsumoto). closes: #20093 Signed-off-by: Yasuhiro Matsumoto Signed-off-by: Christian Brabandt --- diff --git a/src/screen.c b/src/screen.c index 3798de88fd..5dfaed93c1 100644 --- a/src/screen.c +++ b/src/screen.c @@ -445,6 +445,21 @@ skip_for_popup(int row, int col) #endif ) return TRUE; + // Protect cells under the pum from background draws (vsep, status line). + // Excluded for wildmenu pum (MODE_CMDLINE): pum_row can be stale while + // the cmdline grows. +#ifdef FEAT_PROP_POPUP + if (screen_zindex < POPUPMENU_ZINDEX + && pum_visible() + && (State & MODE_CMDLINE) == 0 + && pum_under_menu(row, col, FALSE)) + return TRUE; +#else + if (pum_visible() + && (State & MODE_CMDLINE) == 0 + && pum_under_menu(row, col, FALSE)) + return TRUE; +#endif #ifdef FEAT_PROP_POPUP if (blocked_by_popup(row, col)) return TRUE; diff --git a/src/version.c b/src/version.c index 824a80de9c..08ebffbb59 100644 --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 414, /**/ 413, /**/