changeset 24788:b36ceac30454 v8.2.2932

patch 8.2.2932: select mode test fails Commit: https://github.com/vim/vim/commit/4f3c57f7980592b25f483e5953799c010a8ae196 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jun 3 22:11:08 2021 +0200 patch 8.2.2932: select mode test fails Problem: Select mode test fails. Solution: Do not always reset the held mouse button.
author Bram Moolenaar <Bram@vim.org>
date Thu, 03 Jun 2021 22:15:02 +0200
parents 7ac638bad396
children dcb034bff83a
files src/mouse.c src/normal.c src/proto/normal.pro src/version.c
diffstat 4 files changed, 18 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/mouse.c
+++ b/src/mouse.c
@@ -477,7 +477,7 @@ do_mouse(
 		if ((mod_mask & MOD_MASK_MULTI_CLICK) == MOD_MASK_2CLICK)
 		{
 		    // double click opens new page
-		    end_visual_mode();
+		    end_visual_mode_keep_button();
 		    tabpage_new();
 		    tabpage_move(c1 == 0 ? 9999 : c1 - 1);
 		}
@@ -489,7 +489,7 @@ do_mouse(
 
 		    // It's like clicking on the status line of a window.
 		    if (curwin != old_curwin)
-			end_visual_mode();
+			end_visual_mode_keep_button();
 		}
 	    }
 	    else
@@ -1568,7 +1568,7 @@ retnomove:
 #endif
 	if (flags & MOUSE_MAY_STOP_VIS)
 	{
-	    end_visual_mode();
+	    end_visual_mode_keep_button();
 	    redraw_curbuf_later(INVERTED);	// delete the inversion
 	}
 #if defined(FEAT_CMDWIN) && defined(FEAT_CLIPBOARD)
@@ -1717,7 +1717,7 @@ retnomove:
 #endif
 			&& (flags & MOUSE_MAY_STOP_VIS))))
 	{
-	    end_visual_mode();
+	    end_visual_mode_keep_button();
 	    redraw_curbuf_later(INVERTED);	// delete the inversion
 	}
 #ifdef FEAT_CMDWIN
@@ -1821,7 +1821,7 @@ retnomove:
 	// before moving the cursor for a left click, stop Visual mode
 	if (flags & MOUSE_MAY_STOP_VIS)
 	{
-	    end_visual_mode();
+	    end_visual_mode_keep_button();
 	    redraw_curbuf_later(INVERTED);	// delete the inversion
 	}
 
--- a/src/normal.c
+++ b/src/normal.c
@@ -1350,11 +1350,18 @@ call_yank_do_autocmd(int regname)
 
 /*
  * End Visual mode.
- * This function should ALWAYS be called to end Visual mode, except from
- * do_pending_operator().
+ * This function or the next should ALWAYS be called to end Visual mode, except
+ * from do_pending_operator().
  */
     void
-end_visual_mode(void)
+end_visual_mode()
+{
+    end_visual_mode_keep_button();
+    reset_held_button();
+}
+
+    void
+end_visual_mode_keep_button()
 {
 #ifdef FEAT_CLIPBOARD
     /*
@@ -1380,7 +1387,6 @@ end_visual_mode(void)
 #endif
 
     VIsual_active = FALSE;
-    reset_held_button();
     setmouse();
     mouse_dragging = 0;
 
--- a/src/proto/normal.pro
+++ b/src/proto/normal.pro
@@ -3,6 +3,7 @@ void init_normal_cmds(void);
 void normal_cmd(oparg_T *oap, int toplevel);
 void check_visual_highlight(void);
 void end_visual_mode(void);
+void end_visual_mode_keep_button(void);
 void reset_VIsual_and_resel(void);
 void reset_VIsual(void);
 void restore_visual_mode(void);
--- 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 */
 /**/
+    2932,
+/**/
     2931,
 /**/
     2930,