Mercurial > vim
changeset 9444:e08c8502d7ce v7.4.2003
commit https://github.com/vim/vim/commit/144445d15f2369a58b94b6fee2fe162fc81c8abe
Author: Bram Moolenaar <Bram@vim.org>
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.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Fri, 08 Jul 2016 21:45:05 +0200 |
parents | 42951a7c932c |
children | 66a87d6f2aa1 |
files | src/screen.c src/version.c |
diffstat | 2 files changed, 17 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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