* fhandler.h (class dev_console): Add member ext_mouse_mode5.

* fhandler_console.cc (fhandler_console::read): Implement extended
	mouse mode 1005 (xterm, mintty).
	Fix actual mouse reporting for large coordinates.
This commit is contained in:
Corinna Vinschen 2012-04-25 07:25:00 +00:00
parent f1ce77295d
commit 8ee7527dc2
3 changed files with 37 additions and 10 deletions

View File

@ -1,3 +1,10 @@
2012-04-25 Thomas Wolff <towo@towo.net>
* fhandler.h (class dev_console): Add member ext_mouse_mode5.
* fhandler_console.cc (fhandler_console::read): Implement extended
mouse mode 1005 (xterm, mintty).
Fix actual mouse reporting for large coordinates.
2012-04-24 Corinna Vinschen <corinna@vinschen.de>
* include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 15.

View File

@ -1288,6 +1288,7 @@ class dev_console
bool insert_mode;
int use_mouse;
bool ext_mouse_mode5;
bool ext_mouse_mode6;
bool ext_mouse_mode15;
bool use_focus;

View File

@ -307,14 +307,6 @@ fhandler_console::mouse_aware (MOUSE_EVENT_RECORD& mouse_event)
return 0;
}
/* Check whether adjusted mouse position can be reported */
if (dev_state.dwMousePosition.X > 0xFF - ' ' - 1
|| dev_state.dwMousePosition.Y > 0xFF - ' ' - 1)
{
/* Mouse position out of reporting range */
return 0;
}
return ((mouse_event.dwEventFlags == 0 || mouse_event.dwEventFlags == DOUBLE_CLICK)
&& mouse_event.dwButtonState != dev_state.dwLastButtonState)
|| mouse_event.dwEventFlags == MOUSE_WHEELED
@ -646,7 +638,34 @@ fhandler_console::read (void *pv, size_t& buflen)
dev_state.dwMousePosition.Y + 1);
nread = strlen (tmp);
}
/* else if (dev_state.ext_mouse_mode5) not implemented */
else if (dev_state.ext_mouse_mode5)
{
unsigned int xcode = dev_state.dwMousePosition.X + ' ' + 1;
unsigned int ycode = dev_state.dwMousePosition.Y + ' ' + 1;
__small_sprintf (tmp, "\033[M%c", b + ' ');
nread = 4;
/* the neat nested encoding function of mintty
does not compile in g++, so let's unfold it: */
if (xcode < 0x80)
tmp [nread++] = xcode;
else if (xcode < 0x800)
{
tmp [nread++] = 0xC0 + (xcode >> 6);
tmp [nread++] = 0x80 + (xcode & 0x3F);
}
else
tmp [nread++] = 0;
if (ycode < 0x80)
tmp [nread++] = ycode;
else if (ycode < 0x800)
{
tmp [nread++] = 0xC0 + (ycode >> 6);
tmp [nread++] = 0x80 + (ycode & 0x3F);
}
else
tmp [nread++] = 0;
}
else
{
unsigned int xcode = dev_state.dwMousePosition.X + ' ' + 1;
@ -1566,7 +1585,7 @@ fhandler_console::char_command (char c)
break;
case 1005: /* Extended mouse mode */
syscall_printf ("ignored h/l command for extended mouse mode");
dev_state.ext_mouse_mode5 = c == 'h';
break;
case 1006: /* SGR extended mouse mode */