diff options
author | Christopher Plewright <chris@createng.com> | 2022-10-20 13:11:15 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-10-20 13:11:15 +0100 |
commit | 4c36678ffd1f933a6d4a12415994dea15e4ccec6 (patch) | |
tree | 9006e03edaa19e6ad8c46e14910fa04ac6075549 | |
parent | 7609c88eedc113bc80ccf74050b03a2e0c1a3c5e (diff) |
patch 9.0.0802: MS-Windows: cannot map console mouse scroll eventsv9.0.0802
Problem: MS-Windows: cannot map console mouse scroll events.
Solution: Change CSI to K_SPECIAL when checking for a mapping. (Christopher
Plewright, closes #11410)
-rw-r--r-- | src/getchar.c | 26 | ||||
-rw-r--r-- | src/os_win32.c | 2 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 25 insertions, 5 deletions
diff --git a/src/getchar.c b/src/getchar.c index bbc6d6ec29..3f83b8484b 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -2520,12 +2520,29 @@ handle_mapping( && State != MODE_CONFIRM && !at_ins_compl_key()) { -#ifdef FEAT_GUI - if (gui.in_use && tb_c1 == CSI && typebuf.tb_len >= 2 - && typebuf.tb_buf[typebuf.tb_off + 1] == KS_MODIFIER) +#if defined(FEAT_GUI) || defined(MSWIN) + if (tb_c1 == CSI +# if !defined(MSWIN) + && gui.in_use +# endif + && typebuf.tb_len >= 2 + && (typebuf.tb_buf[typebuf.tb_off + 1] == KS_MODIFIER +# if defined(MSWIN) + || (typebuf.tb_len >= 3 + && typebuf.tb_buf[typebuf.tb_off + 1] == KS_EXTRA + && (typebuf.tb_buf[typebuf.tb_off + 2] == KE_MOUSEUP + || typebuf.tb_buf[typebuf.tb_off + 2] == KE_MOUSEDOWN + || typebuf.tb_buf[typebuf.tb_off + 2] == KE_MOUSELEFT + || typebuf.tb_buf[typebuf.tb_off + 2] == KE_MOUSERIGHT) + ) +# endif + ) + ) { // The GUI code sends CSI KS_MODIFIER {flags}, but mappings expect // K_SPECIAL KS_MODIFIER {flags}. + // MS-Windows sends mouse scroll events CSI KS_EXTRA {what}, but + // mappings expect K_SPECIAL KS_EXTRA {what}. tb_c1 = K_SPECIAL; } #endif @@ -2568,7 +2585,8 @@ handle_mapping( && (mp->m_mode & local_State) && !(mp->m_simplified && seenModifyOtherKeys && typebuf.tb_maplen == 0) - && ((mp->m_mode & MODE_LANGMAP) == 0 || typebuf.tb_maplen == 0)) + && ((mp->m_mode & MODE_LANGMAP) == 0 + || typebuf.tb_maplen == 0)) { #ifdef FEAT_LANGMAP int nomap = nolmaplen; diff --git a/src/os_win32.c b/src/os_win32.c index 03b3ac0371..ca1799f131 100644 --- a/src/os_win32.c +++ b/src/os_win32.c @@ -1265,7 +1265,7 @@ decode_mouse_wheel(MOUSE_EVENT_RECORD *pmer) #ifdef FEAT_PROP_POPUP int lcol = g_xMouse; int lrow = g_yMouse; - wp = mouse_find_win(&lrow, &lcol, FAIL_POPUP); + wp = mouse_find_win(&lrow, &lcol, FIND_POPUP); if (wp != NULL && popup_is_popup(wp)) { g_nMouseClick = -1; diff --git a/src/version.c b/src/version.c index 983fa0c995..34ff382d1f 100644 --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 802, +/**/ 801, /**/ 800, |