# HG changeset patch # User Bram Moolenaar # Date 1619547303 -7200 # Node ID aa04faf1590da6360d147f2dbbf293efe1fae56e # Parent 80ad0944dbe07e1191e888204f58dd0d7c0bfeb6 patch 8.2.2815: status line flickers when redrawing popup menu info Commit: https://github.com/vim/vim/commit/b80d2fb0e7b9adec4cff1bc4e2d30635cb70502e Author: Bram Moolenaar Date: Tue Apr 27 20:06:57 2021 +0200 patch 8.2.2815: status line flickers when redrawing popup menu info Problem: Status line flickers when redrawing popup menu info. Solution: Do not redraw the status line when the focus is in the popup window. (issue #8144) diff --git a/src/popupmenu.c b/src/popupmenu.c --- a/src/popupmenu.c +++ b/src/popupmenu.c @@ -925,6 +925,8 @@ pum_set_selected(int n, int repeat UNUSE || (curtab != curtab_save && valid_tabpage(curtab_save))) { + int save_redr_status; + if (curtab != curtab_save && valid_tabpage(curtab_save)) goto_tabpage_tp(curtab_save, FALSE, FALSE); @@ -953,13 +955,20 @@ pum_set_selected(int n, int repeat UNUSE // Update the screen before drawing the popup menu. // Enable updating the status lines. pum_pretend_not_visible = TRUE; + // But don't draw text at the new popup menu position, // it causes flicker. When resizing we need to draw // anyway, the position may change later. + // Also do not redraw the status line of the original + // current window here, to avoid it gets drawn with + // StatusLineNC for a moment and cause flicker. pum_will_redraw = !resized; + save_redr_status = curwin_save->w_redr_status; + curwin_save->w_redr_status = FALSE; update_screen(0); pum_pretend_not_visible = FALSE; pum_will_redraw = FALSE; + curwin_save->w_redr_status = save_redr_status; if (!resized && win_valid(curwin_save)) { diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2815, +/**/ 2814, /**/ 2813,