changeset 24850:f8906bd5b277 v8.2.2963

patch 8.2.2963: GUI: mouse move may start Visual mode with a popup visible Commit: https://github.com/vim/vim/commit/445f11d5bcfddfa194ebd12b029228c7e957f94c Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jun 8 20:13:31 2021 +0200 patch 8.2.2963: GUI: mouse move may start Visual mode with a popup visible Problem: GUI: mouse move may start Visual mode with a popup visible. Solution: Add special code for mouse move. (closes https://github.com/vim/vim/issues/8318)
author Bram Moolenaar <Bram@vim.org>
date Tue, 08 Jun 2021 20:15:05 +0200
parents a63c6581af98
children 528e605caece
files src/gui.c src/keymap.h src/term.c src/version.c src/vim.h
diffstat 5 files changed, 15 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/gui.c
+++ b/src/gui.c
@@ -3071,6 +3071,9 @@ gui_send_mouse_event(
      */
     switch (button)
     {
+	case MOUSE_MOVE:
+	    button_char = KE_MOUSEMOVE_XY;
+	    goto button_set;
 	case MOUSE_X1:
 	    button_char = KE_X1MOUSE;
 	    goto button_set;
@@ -4925,7 +4928,7 @@ gui_mouse_moved(int x, int y)
     if (popup_visible)
 	// Generate a mouse-moved event, so that the popup can perhaps be
 	// closed, just like in the terminal.
-	gui_send_mouse_event(MOUSE_DRAG, x, y, FALSE, 0);
+	gui_send_mouse_event(MOUSE_MOVE, x, y, FALSE, 0);
 #endif
 }
 
--- a/src/keymap.h
+++ b/src/keymap.h
@@ -273,8 +273,9 @@ enum key_extra
     , KE_FOCUSGAINED = 98	// focus gained
     , KE_FOCUSLOST = 99		// focus lost
     , KE_MOUSEMOVE = 100	// mouse moved with no button down
-    , KE_CANCEL = 101		// return from vgetc()
-    , KE_COMMAND = 102		// <Cmd> special key
+    , KE_MOUSEMOVE_XY = 101	// KE_MOUSEMOVE with coordinates
+    , KE_CANCEL = 102		// return from vgetc()
+    , KE_COMMAND = 103		// <Cmd> special key
 };
 
 /*
--- a/src/term.c
+++ b/src/term.c
@@ -5588,6 +5588,7 @@ check_termcode(
 		&& key_name[0] == (int)KS_EXTRA
 		&& (key_name[1] == (int)KE_X1MOUSE
 		    || key_name[1] == (int)KE_X2MOUSE
+		    || key_name[1] == (int)KE_MOUSEMOVE_XY
 		    || key_name[1] == (int)KE_MOUSELEFT
 		    || key_name[1] == (int)KE_MOUSERIGHT
 		    || key_name[1] == (int)KE_MOUSEDOWN
@@ -5601,6 +5602,9 @@ check_termcode(
 	    mouse_col = 128 * (bytes[0] - ' ' - 1) + bytes[1] - ' ' - 1;
 	    mouse_row = 128 * (bytes[2] - ' ' - 1) + bytes[3] - ' ' - 1;
 	    slen += num_bytes;
+	    // equal to K_MOUSEMOVE
+	    if (key_name[1] == (int)KE_MOUSEMOVE_XY)
+		key_name[1] = (int)KE_MOUSEMOVE;
 	}
 	else
 #endif
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2963,
+/**/
     2962,
 /**/
     2961,
--- a/src/vim.h
+++ b/src/vim.h
@@ -1859,6 +1859,8 @@ typedef int sock_T;
 #define MOUSE_6	0x500	// scroll wheel left
 #define MOUSE_7	0x600	// scroll wheel right
 
+#define MOUSE_MOVE 0x700    // report mouse moved
+
 // 0x20 is reserved by xterm
 #define MOUSE_DRAG_XTERM   0x40