]> granicus.if.org Git - vim/commitdiff
patch 7.4.2003 v7.4.2003
authorBram Moolenaar <Bram@vim.org>
Fri, 8 Jul 2016 19:41:54 +0000 (21:41 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 8 Jul 2016 19:41:54 +0000 (21:41 +0200)
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
src/version.c

index 2f08afb7a828b0899d2472139faa14047c0a787f..4ddded9bfc47e99368e2f9f8ddb588feb0debc4d 100644 (file)
@@ -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
index 38193e2a310c435db3fe692e15f3fdd9a4953002..598135cc581e8072eef33883c08ffe02c681a1be 100644 (file)
@@ -758,6 +758,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2003,
 /**/
     2002,
 /**/