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 <mattn.jp@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Yasuhiro Matsumoto
2026-04-29 15:58:42 +00:00
committed by Christian Brabandt
parent c5de8231f4
commit 458fed4f65
2 changed files with 17 additions and 0 deletions
+15
View File
@@ -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;
+2
View File
@@ -729,6 +729,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
414,
/**/
413,
/**/