From: Christopher Plewright Date: Thu, 20 Oct 2022 12:11:15 +0000 (+0100) Subject: patch 9.0.0802: MS-Windows: cannot map console mouse scroll events X-Git-Tag: v9.0.0802 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4c36678ffd1f933a6d4a12415994dea15e4ccec6;p=vim patch 9.0.0802: MS-Windows: cannot map console mouse scroll events Problem: MS-Windows: cannot map console mouse scroll events. Solution: Change CSI to K_SPECIAL when checking for a mapping. (Christopher Plewright, closes #11410) --- diff --git a/src/getchar.c b/src/getchar.c index bbc6d6ec2..3f83b8484 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 03b3ac037..ca1799f13 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 983fa0c99..34ff382d1 100644 --- a/src/version.c +++ b/src/version.c @@ -695,6 +695,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 802, /**/ 801, /**/