# HG changeset patch # User Bram Moolenaar # Date 1622395803 -7200 # Node ID fb44ba319785b3e9d6cfd53cd7a443ebdc7a0296 # Parent 8d19ed92d1ee82372e284f489c508de03c10f046 patch 8.2.2913: MS-Windows conpty supports using mouse events Commit: https://github.com/vim/vim/commit/6ef5ab59043681a51e8ca2ab0a1e4ff8f0f4bb47 Author: Wez Furlong 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) diff --git a/src/os_win32.c b/src/os_win32.c --- 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; diff --git a/src/version.c b/src/version.c --- 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,