changeset 31194:fa26d002eb2a v9.0.0931

patch 9.0.0931: MS-Windows: mouse column limited to 223 Commit: https://github.com/vim/vim/commit/36446bbb62b466ce873c872b266a29bebbfc9890 Author: Christopher Plewright <chris@createng.com> Date: Wed Nov 23 22:28:08 2022 +0000 patch 9.0.0931: MS-Windows: mouse column limited to 223 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)
author Bram Moolenaar <Bram@vim.org>
date Wed, 23 Nov 2022 23:30:03 +0100
parents 4e0ce485ef64
children 105382a2057d
files src/mouse.c src/os_win32.c src/term.c src/version.c
diffstat 4 files changed, 27 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/mouse.c
+++ b/src/mouse.c
@@ -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;
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -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
 	{
--- a/src/term.c
+++ b/src/term.c
@@ -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
--- 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 */
 /**/
+    931,
+/**/
     930,
 /**/
     929,