# HG changeset patch # User Christian Brabandt # Date 1468007105 -7200 # Node ID e08c8502d7ce1ed33d31503d1a4c7179d21529c6 # Parent 42951a7c932c5c7dd9eeb7dd24be57acdf1f150a commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe Author: Bram Moolenaar Date: Fri Jul 8 21:41:54 2016 +0200 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. diff --git a/src/screen.c b/src/screen.c --- 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 --- a/src/version.c +++ b/src/version.c @@ -759,6 +759,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2003, +/**/ 2002, /**/ 2001,