mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
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)
This commit is contained in:
committed by
Bram Moolenaar
parent
63a2e360cc
commit
36446bbb62
11
src/mouse.c
11
src/mouse.c
@@ -2308,10 +2308,15 @@ check_termcode_mouse(
|
|||||||
*/
|
*/
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
# ifdef FEAT_GUI
|
// For the GUI and for MS-Windows two bytes each are used for row
|
||||||
if (gui.in_use)
|
// 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);
|
num_bytes = get_bytes_from_buf(tp + *slen, bytes, 5);
|
||||||
if (num_bytes == -1) // not enough coordinates
|
if (num_bytes == -1) // not enough coordinates
|
||||||
return -1;
|
return -1;
|
||||||
|
@@ -2055,17 +2055,23 @@ mch_inchar(
|
|||||||
typeahead[typeaheadlen++] = CSI;
|
typeahead[typeaheadlen++] = CSI;
|
||||||
typeahead[typeaheadlen++] = KS_EXTRA;
|
typeahead[typeaheadlen++] = KS_EXTRA;
|
||||||
typeahead[typeaheadlen++] = scroll_dir;
|
typeahead[typeaheadlen++] = scroll_dir;
|
||||||
g_nMouseClick = -1;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
typeahead[typeaheadlen++] = ESC + 128;
|
typeahead[typeaheadlen++] = ESC + 128;
|
||||||
typeahead[typeaheadlen++] = 'M';
|
typeahead[typeaheadlen++] = 'M';
|
||||||
typeahead[typeaheadlen++] = g_nMouseClick;
|
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
|
else
|
||||||
{
|
{
|
||||||
|
11
src/term.c
11
src/term.c
@@ -5857,12 +5857,15 @@ check_termcode(
|
|||||||
|
|
||||||
// We only get here when we have a complete termcode match
|
// 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
|
* For scroll events from the GUI or MS-Windows console, fetch the
|
||||||
* so that we know which window to scroll later.
|
* 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[0] == (int)KS_EXTRA
|
||||||
&& (key_name[1] == (int)KE_X1MOUSE
|
&& (key_name[1] == (int)KE_X1MOUSE
|
||||||
|| key_name[1] == (int)KE_X2MOUSE
|
|| key_name[1] == (int)KE_X2MOUSE
|
||||||
|
@@ -695,6 +695,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
931,
|
||||||
/**/
|
/**/
|
||||||
930,
|
930,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user