From 144445d15f2369a58b94b6fee2fe162fc81c8abe Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 8 Jul 2016 21:41:54 +0200 Subject: [PATCH] patch 7.4.2003 Problem: Still cursor flickering when a callback updates the screen. (David Samvelyan) Solution: Put the cursor in the right position after updating the screen. --- src/screen.c | 18 +++++++++++++++--- src/version.c | 2 ++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/screen.c b/src/screen.c index 2f08afb7a..4ddded9bf 100644 --- a/src/screen.c +++ b/src/screen.c @@ -422,7 +422,7 @@ redraw_after_callback(void) ; /* do nothing */ else if (State & CMDLINE) redrawcmdline(); - else if ((State & NORMAL) || (State & INSERT)) + else if (State & (NORMAL | INSERT)) { update_screen(0); setcursor(); @@ -486,8 +486,6 @@ update_curbuf(int type) } /* - * update_screen() - * * Based on the current value of curwin->w_topline, transfer a screenfull * of stuff from Filemem to ScreenLines[], and update curwin->w_botline. */ @@ -499,6 +497,10 @@ update_screen(int type) #if defined(FEAT_SEARCH_EXTRA) || defined(FEAT_CLIPBOARD) int did_one; #endif +#ifdef FEAT_GUI + int gui_cursor_col; + int gui_cursor_row; +#endif /* Don't do anything if the screen structures are (not yet) valid. */ if (!screen_valid(TRUE)) @@ -696,7 +698,11 @@ update_screen(int type) * scrolling may make it difficult to redraw the text under * it. */ if (gui.in_use) + { + gui_cursor_col = gui.cursor_col; + gui_cursor_row = gui.cursor_row; gui_undraw_cursor(); + } #endif } #endif @@ -752,7 +758,13 @@ update_screen(int type) { out_flush(); /* required before updating the cursor */ if (did_one) + { + /* Put the GUI position where the cursor was, gui_update_cursor() + * uses that. */ + gui.col = gui_cursor_col; + gui.row = gui_cursor_row; gui_update_cursor(FALSE, FALSE); + } gui_update_scrollbars(FALSE); } #endif diff --git a/src/version.c b/src/version.c index 38193e2a3..598135cc5 100644 --- a/src/version.c +++ b/src/version.c @@ -758,6 +758,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2003, /**/ 2002, /**/ -- 2.50.1