changeset 9428:0c7f47088e55 v7.4.1995

commit https://github.com/vim/vim/commit/9d5d3c9c4468ad76f16b50eabd3d9e7eab2ed44d Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jul 7 16:43:02 2016 +0200 patch 7.4.1995 Problem: GUI: cursor drawn in wrong place if a timer callback causes a screen update. (David Samvelyan) Solution: Also redraw the cursor when it's blinking and on.
author Christian Brabandt <cb@256bit.org>
date Thu, 07 Jul 2016 16:45:08 +0200
parents 446d1452c131
children 649e8cffa36f
files src/gui_gtk_x11.c src/gui_mac.c src/gui_photon.c src/gui_w32.c src/gui_x11.c src/proto/gui_gtk_x11.pro src/proto/gui_mac.pro src/proto/gui_photon.pro src/proto/gui_w32.pro src/proto/gui_x11.pro src/screen.c src/version.c
diffstat 12 files changed, 40 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -818,6 +818,12 @@ gui_mch_is_blinking(void)
     return blink_state != BLINK_NONE;
 }
 
+    int
+gui_mch_is_blink_off(void)
+{
+    return blink_state == BLINK_OFF;
+}
+
     void
 gui_mch_set_blinking(long waittime, long on, long off)
 {
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -5120,6 +5120,12 @@ gui_mch_is_blinking(void)
     return FALSE;
 }
 
+    int
+gui_mch_is_blink_off(void)
+{
+    return FALSE;
+}
+
 /*
  * Cursor blink functions.
  *
--- a/src/gui_photon.c
+++ b/src/gui_photon.c
@@ -2238,6 +2238,12 @@ gui_mch_is_blinking(void)
     return blink_state != BLINK_NONE;
 }
 
+    int
+gui_mch_is_blink_off(void)
+{
+    return blink_state == BLINK_OFF;
+}
+
     void
 gui_mch_set_blinking(long wait, long on, long off)
 {
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -546,6 +546,12 @@ gui_mch_is_blinking(void)
     return blink_state != BLINK_NONE;
 }
 
+    int
+gui_mch_is_blink_off(void)
+{
+    return blink_state == BLINK_OFF;
+}
+
     void
 gui_mch_set_blinking(long wait, long on, long off)
 {
--- a/src/gui_x11.c
+++ b/src/gui_x11.c
@@ -3161,6 +3161,12 @@ gui_mch_is_blinking(void)
     return blink_state != BLINK_NONE;
 }
 
+    int
+gui_mch_is_blink_off(void)
+{
+    return blink_state == BLINK_OFF;
+}
+
     void
 gui_mch_set_blinking(long waittime, long on, long off)
 {
--- a/src/proto/gui_gtk_x11.pro
+++ b/src/proto/gui_gtk_x11.pro
@@ -2,6 +2,7 @@
 void gui_mch_prepare(int *argc, char **argv);
 void gui_mch_free_all(void);
 int gui_mch_is_blinking(void);
+int gui_mch_is_blink_off(void);
 void gui_mch_set_blinking(long waittime, long on, long off);
 void gui_mch_stop_blink(void);
 void gui_mch_start_blink(void);
--- a/src/proto/gui_mac.pro
+++ b/src/proto/gui_mac.pro
@@ -15,6 +15,7 @@ void gui_mac_focus_change(EventRecord *e
 void gui_mac_update(EventRecord *event);
 short gui_mch_get_mac_menu_item_index(vimmenu_T *menu, vimmenu_T *parent);
 int gui_mch_is_blinking(void);
+int gui_mch_is_blink_off(void);
 void gui_mch_set_blinking(long wait, long on, long off);
 void gui_mch_stop_blink(void);
 void gui_mch_start_blink(void);
--- a/src/proto/gui_photon.pro
+++ b/src/proto/gui_photon.pro
@@ -40,6 +40,7 @@ void gui_mch_draw_string(int row, int co
 void gui_mch_draw_hollow_cursor(guicolor_T color);
 void gui_mch_draw_part_cursor(int w, int h, guicolor_T color);
 int gui_mch_is_blinking(void);
+int gui_mch_is_blink_off(void);
 void gui_mch_set_blinking(long wait, long on, long off);
 void gui_mch_start_blink(void);
 void gui_mch_stop_blink(void);
--- a/src/proto/gui_w32.pro
+++ b/src/proto/gui_w32.pro
@@ -2,6 +2,7 @@
 int directx_enabled(void);
 int gui_mch_set_rendering_options(char_u *s);
 int gui_mch_is_blinking(void);
+int gui_mch_is_blink_off(void);
 void gui_mch_set_blinking(long wait, long on, long off);
 void gui_mch_stop_blink(void);
 void gui_mch_start_blink(void);
--- a/src/proto/gui_x11.pro
+++ b/src/proto/gui_x11.pro
@@ -54,6 +54,7 @@ void gui_mch_menu_hidden(vimmenu_T *menu
 void gui_mch_draw_menubar(void);
 void gui_x11_menu_cb(Widget w, XtPointer client_data, XtPointer call_data);
 int gui_mch_is_blinking(void);
+int gui_mch_is_blink_off(void);
 void gui_mch_set_blinking(long waittime, long on, long off);
 void gui_mch_stop_blink(void);
 void gui_mch_start_blink(void);
--- a/src/screen.c
+++ b/src/screen.c
@@ -432,9 +432,9 @@ redraw_after_callback(void)
 #ifdef FEAT_GUI
     if (gui.in_use)
     {
-	/* Don't update the cursor while it is blinking, it will get
-	 * updated soon and this avoids interrupting the blinking. */
-	if (!gui_mch_is_blinking())
+	/* Don't update the cursor when it is blinking and off to avoid
+	 * flicker. */
+	if (!gui_mch_is_blink_off())
 	    gui_update_cursor(FALSE, FALSE);
 	gui_mch_flush();
     }
--- 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 */
 /**/
+    1995,
+/**/
     1994,
 /**/
     1993,