]> sourceware.org Git - newlib-cygwin.git/commitdiff
* fhandler.h (class dev_console): Add member ext_mouse_mode5.
authorCorinna Vinschen <corinna@vinschen.de>
Wed, 25 Apr 2012 07:25:00 +0000 (07:25 +0000)
committerCorinna Vinschen <corinna@vinschen.de>
Wed, 25 Apr 2012 07:25:00 +0000 (07:25 +0000)
* fhandler_console.cc (fhandler_console::read): Implement extended
mouse mode 1005 (xterm, mintty).
Fix actual mouse reporting for large coordinates.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_console.cc

index 62e2e0780cdb0cdfcd75caa2e2bb707ff5bbccb3..1300321f5ef7ca2c7ed83642930262f8e785934a 100644 (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.
index 9868a190af9dfffb41fcfc82c448cec3a916a3de..fcb460e9ef4997fcd6b74824e93b070dcfe3904e 100644 (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;
index 9a074f05678e2cc3b86e8a53bce39c1dfee2bf47..e54f11f2ae0d6782c905b3d8745cb413f26efa98 100644 (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 */
This page took 0.040822 seconds and 5 git commands to generate.