Index: trunk/src/VBox/Devices/Input/UsbMouse.cpp
===================================================================
--- trunk/src/VBox/Devices/Input/UsbMouse.cpp	(revision 47226)
+++ trunk/src/VBox/Devices/Input/UsbMouse.cpp	(revision 47227)
@@ -39,4 +39,5 @@
 #define USBHID_STR_ID_PRODUCT_M     2
 #define USBHID_STR_ID_PRODUCT_T     3
+#define USBHID_STR_ID_PRODUCT_MT    4
 /** @} */
 
@@ -52,4 +53,5 @@
 #define USBHID_PID_MOUSE            0x0020
 #define USBHID_PID_TABLET           0x0021
+#define USBHID_PID_MULTI_TOUCH      0x0022
 /** @} */
 
@@ -133,8 +135,7 @@
         struct
         {
-            uint32_t    fButtons;
             uint32_t    x;
             uint32_t    y;
-            int32_t     dz;
+            uint32_t    fButtons;
         } Absolute;
         struct
@@ -231,10 +232,7 @@
 typedef struct USBHIDT_REPORT
 {
-    uint8_t     rid;
-    uint8_t     fButtons;
-    int8_t      dz;
-    int8_t      dummy;
     uint16_t    x;
     uint16_t    y;
+    uint8_t     fButtons;
 } USBHIDT_REPORT, *PUSBHIDT_REPORT;
 
@@ -268,7 +266,8 @@
 static const PDMUSBDESCCACHESTRING g_aUsbHidStrings_en_US[] =
 {
-    { USBHID_STR_ID_MANUFACTURER,   "VirtualBox"    },
-    { USBHID_STR_ID_PRODUCT_M,      "USB Mouse"     },
-    { USBHID_STR_ID_PRODUCT_T,      "USB Tablet"    },
+    { USBHID_STR_ID_MANUFACTURER,   "VirtualBox"      },
+    { USBHID_STR_ID_PRODUCT_M,      "USB Mouse"       },
+    { USBHID_STR_ID_PRODUCT_T,      "USB Tablet"      },
+    { USBHID_STR_ID_PRODUCT_MT,     "USB Multi-Touch" },
 };
 
@@ -359,7 +358,15 @@
     /* Usage */                     0x09, 0x02,     /* Mouse */
     /* Collection */                0xA1, 0x01,     /* Application */
-    /* Report ID */                 0x85, REPORTID_MOUSE,
     /* Usage */                     0x09, 0x01,     /* Pointer */
     /* Collection */                0xA1, 0x00,     /* Physical */
+    /* Usage */                     0x09, 0x30,     /* X */
+    /* Usage */                     0x09, 0x31,     /* Y */
+    /* Logical Minimum */           0x15, 0x00,     /* 0 */
+    /* Logical Maximum */           0x26, 0xFF,0x7F,/* 0x7fff */
+    /* Physical Minimum */          0x35, 0x00,     /* 0 */
+    /* Physical Maximum */          0x46, 0xFF,0x7F,/* 0x7fff */
+    /* Report Size */               0x75, 0x10,     /* 16 */
+    /* Report Count */              0x95, 0x02,     /* 2 */
+    /* Input */                     0x81, 0x02,     /* Data, Value, Absolute, Bit field */
     /* Usage Page */                0x05, 0x09,     /* Button */
     /* Usage Minimum */             0x19, 0x01,     /* Button 1 */
@@ -373,23 +380,4 @@
     /* Report Size */               0x75, 0x03,     /* 3 (padding bits) */
     /* Input */                     0x81, 0x03,     /* Constant, Value, Absolute, Bit field */
-    /* Usage Page */                0x05, 0x01,     /* Generic Desktop */
-    /* Usage */                     0x09, 0x38,     /* Z (wheel) */
-    /* Logical Minimum */           0x15, 0x81,     /* -127 */
-    /* Logical Maximum */           0x25, 0x7F,     /* +127 */
-    /* Report Size */               0x75, 0x08,     /* 8 */
-    /* Report Count */              0x95, 0x01,     /* 1 */
-    /* Input */                     0x81, 0x06,     /* Data, Value, Relative, Bit field */
-    /* Report Count */              0x95, 0x01,     /* 1 (padding byte) */
-    /* Input */                     0x81, 0x03,     /* Constant, Value, Absolute, Bit field */
-    /* Usage Page */                0x05, 0x01,     /* Generic Desktop */
-    /* Usage */                     0x09, 0x30,     /* X */
-    /* Usage */                     0x09, 0x31,     /* Y */
-    /* Logical Minimum */           0x15, 0x00,     /* 0 */
-    /* Logical Maximum */           0x26, 0xFF,0x7F,/* 0x7fff */
-    /* Physical Minimum */          0x35, 0x00,     /* 0 */
-    /* Physical Maximum */          0x46, 0xFF,0x7F,/* 0x7fff */
-    /* Report Size */               0x75, 0x10,     /* 16 */
-    /* Report Count */              0x95, 0x02,     /* 2 */
-    /* Input */                     0x81, 0x02,     /* Data, Value, Absolute, Bit field */
     /* End Collection */            0xC0,
     /* End Collection */            0xC0,
@@ -648,8 +636,8 @@
     /* .bMaxPacketSize0 = */        8,
     /* .idVendor = */               VBOX_USB_VENDOR,
-    /* .idProduct = */              USBHID_PID_TABLET,
+    /* .idProduct = */              USBHID_PID_MULTI_TOUCH,
     /* .bcdDevice = */              0x0100, /* 1.0 */
     /* .iManufacturer = */          USBHID_STR_ID_MANUFACTURER,
-    /* .iProduct = */               USBHID_STR_ID_PRODUCT_T,
+    /* .iProduct = */               USBHID_STR_ID_PRODUCT_MT,
     /* .iSerialNumber = */          0,
     /* .bNumConfigurations = */     1
@@ -911,13 +899,11 @@
     case USBHIDMODE_ABSOLUTE:
     {
-        pReport->t.rid      = REPORTID_MOUSE;
         pReport->t.fButtons = pAccumulated->u.Absolute.fButtons;
         pReport->t.x        = pAccumulated->u.Absolute.x;
         pReport->t.y        = pAccumulated->u.Absolute.y;
-        pReport->t.dz       = clamp_i8(pAccumulated->u.Absolute.dz);
 
         cbCopy = sizeof(pReport->t);
-        LogRel3(("Abs event, x=%d, y=%d, dz=%d, fButtons=%02x, report size %d\n",
-                 pReport->t.x, pReport->t.y, pReport->t.dz, pReport->t.fButtons,
+        LogRel3(("Abs event, x=%d, y=%d, fButtons=%02x, report size %d\n",
+                 pReport->t.x, pReport->t.y, pReport->t.fButtons,
                  cbCopy));
         break;
@@ -1038,5 +1024,4 @@
     pThis->PtrDelta.u.Absolute.x        = x >> pThis->u8CoordShift;
     pThis->PtrDelta.u.Absolute.y        = y >> pThis->u8CoordShift;
-    pThis->PtrDelta.u.Absolute.dz      -= dz;    /* Inverted! */
 
     /* Send a report if possible. */
