changeset 24749:fb44ba319785 v8.2.2913

patch 8.2.2913: MS-Windows conpty supports using mouse events Commit: https://github.com/vim/vim/commit/6ef5ab59043681a51e8ca2ab0a1e4ff8f0f4bb47 Author: Wez Furlong <wez@wezfurlong.org> Date: Sun May 30 19:29:41 2021 +0200 patch 8.2.2913: MS-Windows conpty supports using mouse events Problem: MS-Windows conpty supports using mouse events. Solution: When enabling the mouse enable mouse input and disable quick edit mode. (Wez Furlong, closes #8280)
author Bram Moolenaar <Bram@vim.org>
date Sun, 30 May 2021 19:30:03 +0200
parents 8d19ed92d1ee
children 5039ed8ea97f
files src/os_win32.c src/version.c
diffstat 2 files changed, 30 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -1180,6 +1180,8 @@ static int g_fMouseActive = FALSE;  // m
 static int g_nMouseClick = -1;	    // mouse status
 static int g_xMouse;		    // mouse x coordinate
 static int g_yMouse;		    // mouse y coordinate
+static DWORD g_cmodein = 0;         // Original console input mode
+static DWORD g_cmodeout = 0;        // Original console output mode
 
 /*
  * Enable or disable mouse input
@@ -1200,11 +1202,17 @@ mch_setmouse(int on)
     GetConsoleMode(g_hConIn, &cmodein);
 
     if (g_fMouseActive)
+    {
 	cmodein |= ENABLE_MOUSE_INPUT;
+	cmodein &= ~ENABLE_QUICK_EDIT_MODE;
+    }
     else
+    {
 	cmodein &= ~ENABLE_MOUSE_INPUT;
-
-    SetConsoleMode(g_hConIn, cmodein);
+	cmodein |= g_cmodein & ENABLE_QUICK_EDIT_MODE;
+    }
+
+    SetConsoleMode(g_hConIn, cmodein | ENABLE_EXTENDED_FLAGS);
 }
 
 
@@ -2782,8 +2790,6 @@ SaveConsoleTitleAndIcon(void)
 static int g_fWindInitCalled = FALSE;
 static int g_fTermcapMode = FALSE;
 static CONSOLE_CURSOR_INFO g_cci;
-static DWORD g_cmodein = 0;
-static DWORD g_cmodeout = 0;
 
 /*
  * non-GUI version of mch_init().
@@ -2924,7 +2930,7 @@ mch_exit_c(int r)
     }
 
     SetConsoleCursorInfo(g_hConOut, &g_cci);
-    SetConsoleMode(g_hConIn,  g_cmodein);
+    SetConsoleMode(g_hConIn,  g_cmodein | ENABLE_EXTENDED_FLAGS);
     SetConsoleMode(g_hConOut, g_cmodeout);
 
 # ifdef DYNAMIC_GETTEXT
@@ -3747,7 +3753,14 @@ mch_settmode(tmode_T tmode)
 	cmodein &= ~(ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT |
 		     ENABLE_ECHO_INPUT);
 	if (g_fMouseActive)
+	{
 	    cmodein |= ENABLE_MOUSE_INPUT;
+	    cmodein &= ~ENABLE_QUICK_EDIT_MODE;
+	}
+	else
+	{
+	    cmodein |= g_cmodein & ENABLE_QUICK_EDIT_MODE;
+	}
 	cmodeout &= ~(
 # ifdef FEAT_TERMGUICOLORS
 	    // Do not turn off the ENABLE_PROCESSED_OUTPUT flag when using
@@ -3766,7 +3779,7 @@ mch_settmode(tmode_T tmode)
 	cmodeout |= (ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT);
 	bEnableHandler = FALSE;
     }
-    SetConsoleMode(g_hConIn, cmodein);
+    SetConsoleMode(g_hConIn, cmodein | ENABLE_EXTENDED_FLAGS);
     SetConsoleMode(g_hConOut, cmodeout);
     SetConsoleCtrlHandler(handler_routine, bEnableHandler);
 
@@ -5621,11 +5634,17 @@ termcap_mode_start(void)
 
     GetConsoleMode(g_hConIn, &cmodein);
     if (g_fMouseActive)
+    {
 	cmodein |= ENABLE_MOUSE_INPUT;
+	cmodein &= ~ENABLE_QUICK_EDIT_MODE;
+    }
     else
+    {
 	cmodein &= ~ENABLE_MOUSE_INPUT;
+	cmodein |= g_cmodein & ENABLE_QUICK_EDIT_MODE;
+    }
     cmodein |= ENABLE_WINDOW_INPUT;
-    SetConsoleMode(g_hConIn, cmodein);
+    SetConsoleMode(g_hConIn, cmodein | ENABLE_EXTENDED_FLAGS);
 
     redraw_later_clear();
     g_fTermcapMode = TRUE;
@@ -5650,7 +5669,8 @@ termcap_mode_end(void)
 
     GetConsoleMode(g_hConIn, &cmodein);
     cmodein &= ~(ENABLE_MOUSE_INPUT | ENABLE_WINDOW_INPUT);
-    SetConsoleMode(g_hConIn, cmodein);
+    cmodein |= g_cmodein & ENABLE_QUICK_EDIT_MODE;
+    SetConsoleMode(g_hConIn, cmodein | ENABLE_EXTENDED_FLAGS);
 
 # ifdef FEAT_RESTORE_ORIG_SCREEN
     cb = exiting ? &g_cbOrig : &g_cbNonTermcap;
--- 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 */
 /**/
+    2913,
+/**/
     2912,
 /**/
     2911,