changeset 24551:aa04faf1590d v8.2.2815

patch 8.2.2815: status line flickers when redrawing popup menu info Commit: https://github.com/vim/vim/commit/b80d2fb0e7b9adec4cff1bc4e2d30635cb70502e Author: Bram Moolenaar <Bram@vim.org> 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)
author Bram Moolenaar <Bram@vim.org>
date Tue, 27 Apr 2021 20:15:03 +0200
parents 80ad0944dbe0
children b243f528702a
files src/popupmenu.c src/version.c
diffstat 2 files changed, 11 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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))
 			{
--- 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,