]> granicus.if.org Git - vim/commitdiff
patch 9.0.0931: MS-Windows: mouse column limited to 223 v9.0.0931
authorChristopher Plewright <chris@createng.com>
Wed, 23 Nov 2022 22:28:08 +0000 (22:28 +0000)
committerBram Moolenaar <Bram@vim.org>
Wed, 23 Nov 2022 22:28:08 +0000 (22:28 +0000)
Problem:    MS-Windows: mouse column limited to 223.
Solution:   Use two bytes for each mouse coordinate.  Add the mouse position
            to scroll events. (Christopher Plewright, closes #11597)

src/mouse.c
src/os_win32.c
src/term.c
src/version.c

index b83523a26f004a1656dd5f9a1b865f8e16b7b03b..954b2134dd4dd036c38b6f70d458b0db38c6d72d 100644 (file)
@@ -2308,10 +2308,15 @@ check_termcode_mouse(
         */
        for (;;)
        {
-# ifdef FEAT_GUI
-           if (gui.in_use)
+           // For the GUI and for MS-Windows two bytes each are used for row
+           // and column.  Allows for more than 223 columns.
+# if defined(FEAT_GUI) || defined(MSWIN)
+           if (TRUE
+#  if defined(FEAT_GUI) && !defined(MSWIN)
+               && gui.in_use
+#  endif
+               )
            {
-               // GUI uses more bits for columns > 223
                num_bytes = get_bytes_from_buf(tp + *slen, bytes, 5);
                if (num_bytes == -1)    // not enough coordinates
                    return -1;
index ead50e186a9c47dae6147f7f1d0a225003c52348..4c97b31002a51b7c2a1182ca8365304667800ccf 100644 (file)
@@ -2055,17 +2055,23 @@ mch_inchar(
                typeahead[typeaheadlen++] = CSI;
                typeahead[typeaheadlen++] = KS_EXTRA;
                typeahead[typeaheadlen++] = scroll_dir;
-               g_nMouseClick = -1;
            }
            else
            {
                typeahead[typeaheadlen++] = ESC + 128;
                typeahead[typeaheadlen++] = 'M';
                typeahead[typeaheadlen++] = g_nMouseClick;
-               typeahead[typeaheadlen++] = g_xMouse + '!';
-               typeahead[typeaheadlen++] = g_yMouse + '!';
-               g_nMouseClick = -1;
            }
+
+           // Pass the pointer coordinates of the mouse event in 2 bytes,
+           // allowing for > 223 columns.  Both for click and scroll events.
+           // This is the same as what is used for the GUI.
+           typeahead[typeaheadlen++] = (char_u)(g_xMouse / 128 + ' ' + 1);
+           typeahead[typeaheadlen++] = (char_u)(g_xMouse % 128 + ' ' + 1);
+           typeahead[typeaheadlen++] = (char_u)(g_yMouse / 128 + ' ' + 1);
+           typeahead[typeaheadlen++] = (char_u)(g_yMouse % 128 + ' ' + 1);
+
+           g_nMouseClick = -1;
        }
        else
        {
index 7f639dd572267a89c93e561447a4cdce60a95425..981e2169c7b47351515b3fff3c5d725b2f33e2c9 100644 (file)
@@ -5857,12 +5857,15 @@ check_termcode(
 
        // We only get here when we have a complete termcode match
 
-#ifdef FEAT_GUI
+#if defined(FEAT_GUI) || defined(MSWIN)
        /*
-        * Only in the GUI: Fetch the pointer coordinates of the scroll event
-        * so that we know which window to scroll later.
+        * For scroll events from the GUI or MS-Windows console, fetch the
+        * pointer coordinates so that we know which window to scroll later.
         */
-       if (gui.in_use
+       if (TRUE
+# if defined(FEAT_GUI) && !defined(MSWIN)
+               && gui.in_use
+# endif
                && key_name[0] == (int)KS_EXTRA
                && (key_name[1] == (int)KE_X1MOUSE
                    || key_name[1] == (int)KE_X2MOUSE
index a96b11ada91a22c278ddf21a3b63964e648154d8..98395531019d92b6b55725212321a3fe1191fd11 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    931,
 /**/
     930,
 /**/