Mercurial > vim
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;