VirtualBox

Changeset 95368 in vbox


Ignore:
Timestamp:
Jun 24, 2022 7:41:25 PM (3 years ago)
Author:
vboxsync
Message:

FE/Qt, Main/Console+Mouse, VBoxManage: Touchpad support, should be functional now. bugref:9891

Location:
trunk
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/doc/manual/en_US/man_VBoxManage-modifyvm.xml

    r94070 r95368  
    386386          <arg choice="plain">usbtablet</arg>
    387387          <arg choice="plain">usbmultitouch</arg>
     388          <arg choice="plain">usbmtscreenpluspad</arg>
    388389        </group></arg>
    389390      <arg>--keyboard=<group choice="plain">
     
    17521753      <variablelist>
    17531754        <varlistentry>
    1754           <term><option>--mouse=ps2 | usb | usbtablet | usbmultitouch</option></term>
     1755          <term><option>--mouse=ps2 | usb | usbtablet | usbmultitouch | usbmtscreenpluspad</option></term>
    17551756          <listitem><para>
    17561757              Specifies the mode of the mouse to use in the VM. Valid
    17571758              values are: <literal>ps2</literal>,
    1758               <literal>usb</literal>, <literal>usbtablet</literal>, and
    1759               <literal>usbmultitouch</literal>.
     1759              <literal>usb</literal>, <literal>usbtablet</literal>,
     1760              <literal>usbmultitouch</literal> and
     1761              <literal>usbmtscreenpluspad</literal>.
    17601762            </para></listitem>
    17611763        </varlistentry>
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp

    r95366 r95368  
    22832283                        fEnableUsb = true;
    22842284                }
     2285                else if (!RTStrICmp(ValueUnion.psz, "usbmtscreenpluspad"))
     2286                {
     2287                    CHECK_ERROR(sessionMachine, COMSETTER(PointingHIDType)(PointingHIDType_USBMultiTouchScreenPlusPad));
     2288                    if (SUCCEEDED(hrc))
     2289                        fEnableUsb = true;
     2290                }
    22852291                else if (!RTStrICmp(ValueUnion.psz, "none"))
    22862292                {
  • trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendCOM.cpp

    r95364 r95368  
    285285    switch (type)
    286286    {
    287         case KPointingHIDType_None:          return QApplication::translate("UICommon", "None", "PointingHIDType");
    288         case KPointingHIDType_PS2Mouse:      return QApplication::translate("UICommon", "PS/2 Mouse", "PointingHIDType");
    289         case KPointingHIDType_USBMouse:      return QApplication::translate("UICommon", "USB Mouse", "PointingHIDType");
    290         case KPointingHIDType_USBTablet:     return QApplication::translate("UICommon", "USB Tablet", "PointingHIDType");
    291         case KPointingHIDType_ComboMouse:    return QApplication::translate("UICommon", "PS/2 and USB Mouse", "PointingHIDType");
    292         case KPointingHIDType_USBMultiTouch: return QApplication::translate("UICommon", "USB Multi-Touch Tablet", "PointingHIDType");
     287        case KPointingHIDType_None:                       return QApplication::translate("UICommon", "None", "PointingHIDType");
     288        case KPointingHIDType_PS2Mouse:                   return QApplication::translate("UICommon", "PS/2 Mouse", "PointingHIDType");
     289        case KPointingHIDType_USBMouse:                   return QApplication::translate("UICommon", "USB Mouse", "PointingHIDType");
     290        case KPointingHIDType_USBTablet:                  return QApplication::translate("UICommon", "USB Tablet", "PointingHIDType");
     291        case KPointingHIDType_ComboMouse:                 return QApplication::translate("UICommon", "PS/2 and USB Mouse", "PointingHIDType");
     292        case KPointingHIDType_USBMultiTouch:              return QApplication::translate("UICommon", "USB Multi-Touch Tablet", "PointingHIDType");
     293        case KPointingHIDType_USBMultiTouchScreenPlusPad: return QApplication::translate("UICommon", "USB MT TouchScreen and TouchPad", "PointingHIDType");
    293294        default: AssertMsgFailed(("No text for %d", type)); break;
    294295    }
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp

    r95138 r95368  
    428428            CMouseCapabilityChangedEvent comEventSpecific(pEvent);
    429429            emit sigMouseCapabilityChange(comEventSpecific.GetSupportsAbsolute(), comEventSpecific.GetSupportsRelative(),
    430                                           comEventSpecific.GetSupportsMultiTouch(), comEventSpecific.GetNeedsHostCursor());
     430                                          comEventSpecific.GetSupportsTouchScreen(), comEventSpecific.GetSupportsTouchPad(),
     431                                          comEventSpecific.GetNeedsHostCursor());
    431432            break;
    432433        }
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.h

    r94737 r95368  
    149149        /** Notifies about mouse pointer @a shapeData change. */
    150150        void sigMousePointerShapeChange(const UIMousePointerShapeData &shapeData);
    151         /** Notifies about mouse capability change to @a fSupportsAbsolute, @a fSupportsRelative, @a fSupportsMultiTouch and @a fNeedsHostCursor. */
    152         void sigMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fSupportsMultiTouch, bool fNeedsHostCursor);
     151        /** Notifies about mouse capability change to @a fSupportsAbsolute, @a fSupportsRelative, @a fSupportsMTAbsolute, @a fSupportsMTRelative and @a fNeedsHostCursor. */
     152        void sigMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fSupportsMTAbsolute, bool fSupportsMTRelative, bool fNeedsHostCursor);
    153153        /** Notifies about guest request to change the cursor position to @a uX * @a uY.
    154154          * @param  fContainsData  Brings whether the @a uX and @a uY values are valid and could be used by the GUI now. */
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.cpp

    r93990 r95368  
    4444    /** Notifies about mouse pointer @a shapeData change. */
    4545    void sigMousePointerShapeChange(const UIMousePointerShapeData &shapeData);
    46     /** Notifies about mouse capability change to @a fSupportsAbsolute, @a fSupportsRelative, @a fSupportsMultiTouch and @a fNeedsHostCursor. */
    47     void sigMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fSupportsMultiTouch, bool fNeedsHostCursor);
     46    /** Notifies about mouse capability change to @a fSupportsAbsolute, @a fSupportsRelative,
     47      * @a fSupportsTouchScreen, @a fSupportsTouchPad, and @a fNeedsHostCursor. */
     48    void sigMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative,
     49                                  bool fSupportsTouchScreen, bool fSupportsTouchPad,
     50                                  bool fNeedsHostCursor);
    4851    /** Notifies about guest request to change the cursor position to @a uX * @a uY.
    4952      * @param  fContainsData  Brings whether the @a uX and @a uY values are valid and could be used by the GUI now. */
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIConsoleEventHandler.h

    r93115 r95368  
    4949    /** Notifies about mouse pointer @a shapeData change. */
    5050    void sigMousePointerShapeChange(const UIMousePointerShapeData &shapeData);
    51     /** Notifies about mouse capability change to @a fSupportsAbsolute, @a fSupportsRelative, @a fSupportsMultiTouch and @a fNeedsHostCursor. */
    52     void sigMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fSupportsMultiTouch, bool fNeedsHostCursor);
     51    /** Notifies about mouse capability change to @a fSupportsAbsolute, @a fSupportsRelative,
     52     * @a fSupportsTouchScreen, @a fSupportsTouchPad and @a fNeedsHostCursor. */
     53    void sigMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative,
     54                                  bool fSupportsTouchScreen, bool fSupportsTouchPad,
     55                                  bool fNeedsHostCursor);
    5356    /** Notifies about guest request to change the cursor position to @a uX * @a uY.
    5457      * @param  fContainsData  Brings whether the @a uX and @a uY values are valid and could be used by the GUI now. */
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp

    r94660 r95368  
    593593    bool fIsMouseSupportsAbsolute = uisession()->isMouseSupportsAbsolute();
    594594    bool fIsMouseSupportsRelative = uisession()->isMouseSupportsRelative();
    595     bool fIsMouseSupportsMultiTouch = uisession()->isMouseSupportsMultiTouch();
     595    bool fIsMouseSupportsTouchScreen = uisession()->isMouseSupportsTouchScreen();
     596    bool fIsMouseSupportsTouchPad = uisession()->isMouseSupportsTouchPad();
    596597    bool fIsMouseHostCursorNeeded = uisession()->isMouseHostCursorNeeded();
    597598
    598599    /* For now MT stuff is not important for MI action: */
    599     Q_UNUSED(fIsMouseSupportsMultiTouch);
     600    Q_UNUSED(fIsMouseSupportsTouchScreen);
     601    Q_UNUSED(fIsMouseSupportsTouchPad);
    600602
    601603    /* Update action state: */
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp

    r94064 r95368  
    746746                case QEvent::TouchEnd:
    747747                {
    748                     if (uisession()->isMouseSupportsMultiTouch())
     748                    if (uisession()->isMouseSupportsTouchScreen() || uisession()->isMouseSupportsTouchPad())
    749749                        return multiTouchEvent(static_cast<QTouchEvent*>(pEvent), uScreenId);
    750750                    break;
     
    912912{
    913913    /* Ignore fake mouse events. */
    914     if (uisession()->isMouseSupportsMultiTouch() && mouseIsTouchSource(iEventType, mouseButtons))
     914    if (   (uisession()->isMouseSupportsTouchScreen() || uisession()->isMouseSupportsTouchPad())
     915        && mouseIsTouchSource(iEventType, mouseButtons))
    915916        return true;
    916917
     
    11941195
    11951196    LONG xShift = 0, yShift = 0;
    1196     ULONG dummy;
    1197     KGuestMonitorStatus monitorStatus = KGuestMonitorStatus_Enabled;
    1198     display().GetScreenResolution(uScreenId, dummy, dummy, dummy, xShift, yShift, monitorStatus);
     1197    if (pTouchEvent->device()->type() == QTouchDevice::TouchScreen)
     1198    {
     1199        ULONG dummy;
     1200        KGuestMonitorStatus monitorStatus = KGuestMonitorStatus_Enabled;
     1201        display().GetScreenResolution(uScreenId, dummy, dummy, dummy, xShift, yShift, monitorStatus);
     1202    }
    11991203
    12001204    /* Pass all multi-touch events into guest: */
     
    12021206    foreach (const QTouchEvent::TouchPoint &touchPoint, pTouchEvent->touchPoints())
    12031207    {
    1204         /* Get touch-point origin: */
    1205         QPoint currentTouchPoint = touchPoint.pos().toPoint();
    1206 
    12071208        /* Get touch-point state: */
    12081209        LONG iTouchPointState = KTouchContactState_None;
     
    12121213            case Qt::TouchPointMoved:
    12131214            case Qt::TouchPointStationary:
    1214                 iTouchPointState = KTouchContactState_InContact | KTouchContactState_InRange;
     1215                iTouchPointState = KTouchContactState_InContact;
     1216                if (pTouchEvent->device()->type() == QTouchDevice::TouchScreen)
     1217                    iTouchPointState |= KTouchContactState_InRange;
    12151218                break;
    12161219            default:
     
    12181221        }
    12191222
    1220         /* Pass absolute touch-point data: */
    1221         LogRelFlow(("UIMouseHandler::multiTouchEvent: Origin: %dx%d, Id: %d, State: %d\n",
    1222                     currentTouchPoint.x(), currentTouchPoint.y(), touchPoint.id(), iTouchPointState));
    1223 
    1224         contacts[iTouchPointIndex] = RT_MAKE_U64_FROM_U16((uint16_t)currentTouchPoint.x() + 1 + xShift,
    1225                                                           (uint16_t)currentTouchPoint.y() + 1 + yShift,
    1226                                                           RT_MAKE_U16(touchPoint.id(), iTouchPointState),
    1227                                                           0);
     1223        if (pTouchEvent->device()->type() == QTouchDevice::TouchScreen)
     1224        {
     1225            /* Get absolute touch-point origin: */
     1226            QPoint currentTouchPoint = touchPoint.pos().toPoint();
     1227
     1228            /* Pass absolute touch-point data: */
     1229            LogRelFlow(("UIMouseHandler::multiTouchEvent: TouchScreen, Origin: %dx%d, Id: %d, State: %d\n",
     1230                        currentTouchPoint.x(), currentTouchPoint.y(), touchPoint.id(), iTouchPointState));
     1231
     1232            contacts[iTouchPointIndex] = RT_MAKE_U64_FROM_U16((uint16_t)currentTouchPoint.x() + 1 + xShift,
     1233                                                              (uint16_t)currentTouchPoint.y() + 1 + yShift,
     1234                                                              RT_MAKE_U16(touchPoint.id(), iTouchPointState),
     1235                                                              0);
     1236        } else {
     1237            /* Get relative touch-point normalized position: */
     1238            QPointF rawTouchPoint = touchPoint.normalizedPos();
     1239
     1240            /* Pass relative touch-point data as Normalized Integer: */
     1241            uint16_t xNorm = rawTouchPoint.x() * 0xffff;
     1242            uint16_t yNorm = rawTouchPoint.y() * 0xffff;
     1243            LogRelFlow(("UIMouseHandler::multiTouchEvent: TouchPad, Normalized Position: %ux%u, Id: %d, State: %d\n",
     1244                        xNorm, yNorm, touchPoint.id(), iTouchPointState));
     1245
     1246            contacts[iTouchPointIndex] = RT_MAKE_U64_FROM_U16(xNorm, yNorm,
     1247                                                              RT_MAKE_U16(touchPoint.id(), iTouchPointState),
     1248                                                              0);
     1249        }
    12281250
    12291251        LogRelFlow(("UIMouseHandler::multiTouchEvent: %RX64\n", contacts[iTouchPointIndex]));
     
    12341256    mouse().PutEventMultiTouch(pTouchEvent->touchPoints().size(),
    12351257                               contacts,
     1258                               pTouchEvent->device()->type() == QTouchDevice::TouchScreen,
    12361259                               (ULONG)RTTimeMilliTS());
    12371260
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp

    r94986 r95368  
    210210        m_fIsMouseSupportsAbsolute = mouse().GetAbsoluteSupported();
    211211        m_fIsMouseSupportsRelative = mouse().GetRelativeSupported();
    212         m_fIsMouseSupportsMultiTouch = mouse().GetMultiTouchSupported();
     212        m_fIsMouseSupportsTouchScreen = mouse().GetTouchScreenSupported();
     213        m_fIsMouseSupportsTouchPad = mouse().GetTouchPadSupported();
    213214        m_fIsMouseHostCursorNeeded = mouse().GetNeedsHostCursor();
    214215        sltAdditionsChange();
     
    510511}
    511512
    512 void UISession::sltMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fSupportsMultiTouch, bool fNeedsHostCursor)
     513void UISession::sltMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative,
     514                                         bool fSupportsTouchScreen, bool fSupportsTouchPad,
     515                                         bool fNeedsHostCursor)
    513516{
    514517    LogRelFlow(("GUI: UISession::sltMouseCapabilityChange: "
    515518                "Supports absolute: %s, Supports relative: %s, "
    516                 "Supports multi-touch: %s, Needs host cursor: %s\n",
     519                "Supports touchscreen: %s, Supports touchpad: %s, "
     520                "Needs host cursor: %s\n",
    517521                fSupportsAbsolute ? "TRUE" : "FALSE", fSupportsRelative ? "TRUE" : "FALSE",
    518                 fSupportsMultiTouch ? "TRUE" : "FALSE", fNeedsHostCursor ? "TRUE" : "FALSE"));
     522                fSupportsTouchScreen ? "TRUE" : "FALSE", fSupportsTouchPad ? "TRUE" : "FALSE",
     523                fNeedsHostCursor ? "TRUE" : "FALSE"));
    519524
    520525    /* Check if something had changed: */
    521526    if (   m_fIsMouseSupportsAbsolute != fSupportsAbsolute
    522527        || m_fIsMouseSupportsRelative != fSupportsRelative
    523         || m_fIsMouseSupportsMultiTouch != fSupportsMultiTouch
     528        || m_fIsMouseSupportsTouchScreen != fSupportsTouchScreen
     529        || m_fIsMouseSupportsTouchPad != fSupportsTouchPad
    524530        || m_fIsMouseHostCursorNeeded != fNeedsHostCursor)
    525531    {
     
    527533        m_fIsMouseSupportsAbsolute = fSupportsAbsolute;
    528534        m_fIsMouseSupportsRelative = fSupportsRelative;
    529         m_fIsMouseSupportsMultiTouch = fSupportsMultiTouch;
     535        m_fIsMouseSupportsTouchScreen = fSupportsTouchScreen;
     536        m_fIsMouseSupportsTouchPad = fSupportsTouchPad;
    530537        m_fIsMouseHostCursorNeeded = fNeedsHostCursor;
    531538
     
    892899    , m_fIsMouseSupportsAbsolute(false)
    893900    , m_fIsMouseSupportsRelative(false)
    894     , m_fIsMouseSupportsMultiTouch(false)
     901    , m_fIsMouseSupportsTouchScreen(false)
     902    , m_fIsMouseSupportsTouchPad(false)
    895903    , m_fIsMouseHostCursorNeeded(false)
    896904    , m_fIsMouseCaptured(false)
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h

    r93115 r95368  
    209209    bool isMouseSupportsAbsolute() const { return m_fIsMouseSupportsAbsolute; }
    210210    bool isMouseSupportsRelative() const { return m_fIsMouseSupportsRelative; }
    211     bool isMouseSupportsMultiTouch() const { return m_fIsMouseSupportsMultiTouch; }
     211    bool isMouseSupportsTouchScreen() const { return m_fIsMouseSupportsTouchScreen; }
     212    bool isMouseSupportsTouchPad() const { return m_fIsMouseSupportsTouchPad; }
    212213    bool isMouseHostCursorNeeded() const { return m_fIsMouseHostCursorNeeded; }
    213214    bool isMouseCaptured() const { return m_fIsMouseCaptured; }
     
    368369    /** Handles signal about mouse pointer @a shapeData change. */
    369370    void sltMousePointerShapeChange(const UIMousePointerShapeData &shapeData);
    370     /** Handles signal about mouse capability change to @a fSupportsAbsolute, @a fSupportsRelative, @a fSupportsMultiTouch and @a fNeedsHostCursor. */
    371     void sltMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fSupportsMultiTouch, bool fNeedsHostCursor);
     371    /** Handles signal about mouse capability change to @a fSupportsAbsolute, @a fSupportsRelative,
     372      * @a fSupportsTouchScreen, @a fSupportsTouchPad and @a fNeedsHostCursor. */
     373    void sltMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative,
     374                                  bool fSupportsTouchScreen, bool fSupportsTouchPad,
     375                                  bool fNeedsHostCursor);
    372376    /** Handles signal about guest request to change the cursor position to @a uX * @a uY.
    373377      * @param  fContainsData  Brings whether the @a uX and @a uY values are valid and could be used by the GUI now. */
     
    587591    bool m_fIsMouseSupportsAbsolute : 1;
    588592    bool m_fIsMouseSupportsRelative : 1;
    589     bool m_fIsMouseSupportsMultiTouch: 1;
     593    bool m_fIsMouseSupportsTouchScreen: 1;
     594    bool m_fIsMouseSupportsTouchPad: 1;
    590595    bool m_fIsMouseHostCursorNeeded : 1;
    591596    bool m_fIsMouseCaptured : 1;
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r95365 r95368  
    14451445  <enum
    14461446    name="PointingHIDType"
    1447     uuid="19964e93-0050-45c4-9382-a7bccc53e666"
     1447    uuid="b3fd8215-6870-4e61-b6d9-2998fa625de0"
    14481448    >
    14491449    <desc>
     
    14731473    <const name="USBMultiTouch"     value="6">
    14741474      <desc>
    1475         USB multi-touch device.  Also enables the USB tablet and mouse devices.
     1475        USB multi-touch device, just touchscreen.  It is a specific mode of the
     1476        USB tablet and also enables the mouse device.
     1477      </desc>
     1478    </const>
     1479    <const name="USBMultiTouchScreenPlusPad" value="7">
     1480      <desc>
     1481        USB multi-touch device, touchscreen plus touchpad.  It also enables the
     1482        mouse device.
    14761483      </desc>
    14771484    </const>
     
    19681975    <method name="removePortForwardRule">
    19691976      <rest request="post" path="/natnetworks/{networkid}/configuration/"/>
    1970       <param name="iSipv6" type="boolean" dir="in"/>
     1977      <param name="isIpv6" type="boolean" dir="in"/>
    19711978      <param name="ruleName" type="wstring" dir="in"/>
    19721979    </method>
     
    1997619983  <interface
    1997719984    name="IMouse" extends="$unknown"
    19978     uuid="10cd08d0-e8b8-4838-b10c-45ba193734c1"
     19985    uuid="25360a74-55e5-4f14-ac2a-f5cf8e62e4af"
    1997919986    wsmap="managed"
    1998019987    rest="managed"
     
    2001520022    </attribute>
    2001620023
    20017     <attribute name="multiTouchSupported" type="boolean" readonly="yes">
    20018       <desc>
    20019         Whether the guest OS has enabled the multi-touch reporting device.
     20024    <attribute name="touchScreenSupported" type="boolean" readonly="yes">
     20025      <desc>
     20026        Whether the guest OS has enabled the multi-touch reporting device,
     20027        touchscreen variant.
     20028        <note>
     20029          You can use the <link to="IMouseCapabilityChangedEvent"/>
     20030          event to be instantly informed about changes of this attribute
     20031          during virtual machine execution.
     20032        </note>
     20033        <see><link to="#putMouseEvent"/></see>
     20034      </desc>
     20035    </attribute>
     20036
     20037    <attribute name="touchPadSupported" type="boolean" readonly="yes">
     20038      <desc>
     20039        Whether the guest OS has enabled the multi-touch reporting device,
     20040        touchpad variant.
    2002020041        <note>
    2002120042          You can use the <link to="IMouseCapabilityChangedEvent"/>
     
    2016820189    <method name="putEventMultiTouch">
    2016920190      <desc>
    20170         Sends a multi-touch pointer event. The coordinates are expressed in
    20171         pixels and start from <tt>[1,1]</tt> which corresponds to the top left
    20172         corner of the virtual display.
     20191        Sends a multi-touch pointer event. For touchscreen events the
     20192        coordinates are expressed in pixels and start from <tt>[1,1]</tt> which
     20193        corresponds to the top left corner of the virtual display, for
     20194        touchpad events the coordinates are normalized to the range 0..0xffff.
    2017320195
    2017420196        <result name="E_ACCESSDENIED">
     
    2018320205        </note>
    2018420206
    20185         <see><link to="#multiTouchSupported"/></see>
     20207        <see><link to="#touchScreenSupported"/> and <link to="#touchPadSupported"/></see>
    2018620208      </desc>
    2018720209
     
    2019520217        <desc>
    2019620218          Each array element contains packed information about one contact.
    20197           Bits 0..15: X coordinate in pixels.
    20198           Bits 16..31: Y coordinate in pixels.
     20219          Bits 0..15: X coordinate in pixels or normalized X position.
     20220          Bits 16..31: Y coordinate in pixels or normalized Y position.
    2019920221          Bits 32..39: contact identifier.
    2020020222          Bit 40: "in contact" flag, which indicates that there is a contact with the touch surface.
     
    2020420226      </param>
    2020520227
     20228      <param name="isTouchScreen" type="boolean" dir="in">
     20229        <desc>
     20230          Distinguishes between touchscreen and touchpad events.
     20231        </desc>
     20232      </param>
     20233
    2020620234      <param name="scanTime" type="unsigned long" dir="in">
    2020720235        <desc>
     
    2022720255          "id1,x1,y1,inContact1,inRange1;...;idN,xN,yN,inContactN,inRangeN".
    2022820256          For example for two contacts: "0,10,20,1,1;1,30,40,1,1"
     20257        </desc>
     20258      </param>
     20259
     20260      <param name="isTouchScreen" type="boolean" dir="in">
     20261        <desc>
     20262          Distinguishes between touchscreen and touchpad events.
    2022920263        </desc>
    2023020264      </param>
     
    2602126055    <const name="OnGuestMultiTouch" value="93">
    2602226056      <desc>
    26023         See <link to="IGuestMouseEvent">IGuestMouseEvent</link>.
     26057        See <link to="IGuestMultiTouchEvent">IGuestMultiTouchEvent</link>.
    2602426058      </desc>
    2602526059    </const>
     
    2675926793  <interface
    2676026794    name="IMouseCapabilityChangedEvent" extends="IEvent"
    26761     uuid="70e7779a-e64a-4908-804e-371cad23a756"
     26795    uuid="4a773393-7a8c-4d57-b228-9ade4049a81f"
    2676226796    wsmap="managed" autogen="VBoxEvent" id="OnMouseCapabilityChanged"
    2676326797    >
     
    2677626810      </desc>
    2677726811    </attribute>
    26778     <attribute name="supportsMultiTouch" type="boolean" readonly="yes">
    26779       <desc>
    26780         Supports multi-touch events coordinates.
     26812    <attribute name="supportsTouchScreen" type="boolean" readonly="yes">
     26813      <desc>
     26814        Supports multi-touch events, touchscreen variant.
     26815      </desc>
     26816    </attribute>
     26817    <attribute name="supportsTouchPad" type="boolean" readonly="yes">
     26818      <desc>
     26819        Supports multi-touch events, touchpad variant.
    2678126820      </desc>
    2678226821    </attribute>
     
    2712427163  <interface
    2712527164    name="IGuestMultiTouchEvent" extends="IEvent"
    27126     uuid="be8a0eb5-f4f4-4dd0-9d30-c89b873247ec"
     27165    uuid="1f99d9dc-c144-4c28-9f88-e6f488db5441"
    2712727166    wsmap="managed" autogen="VBoxEvent" id="OnGuestMultiTouch"
    2712827167    >
     
    2715527194        Bit 0: in contact.
    2715627195        Bit 1: in range.
     27196      </desc>
     27197    </attribute>
     27198    <attribute name="isTouchScreen" type="boolean" readonly="yes">
     27199      <desc>
     27200        Distinguishes between touchscreen and touchpad events.
    2715727201      </desc>
    2715827202    </attribute>
  • trunk/src/VBox/Main/include/ConsoleImpl.h

    r94804 r95368  
    122122    virtual void i_onMouseCapabilityChange(BOOL supportsAbsolute,
    123123                                           BOOL supportsRelative,
    124                                            BOOL supportsMT,
    125                                            BOOL needsHostCursor){NOREF(supportsAbsolute); NOREF(supportsRelative); NOREF(supportsMT); NOREF(needsHostCursor);}
     124                                           BOOL supportsTouchScreen,
     125                                           BOOL supportsTouchPad,
     126                                           BOOL needsHostCursor)
     127    {
     128        RT_NOREF(supportsAbsolute, supportsRelative, supportsTouchScreen, supportsTouchPad, needsHostCursor);
     129    }
    126130};
    127131
     
    277281                                     uint32_t cbShape);
    278282    void i_onMouseCapabilityChange(BOOL supportsAbsolute, BOOL supportsRelative,
    279                                    BOOL supportsMT, BOOL needsHostCursor);
     283                                   BOOL supportsTouchScreen, BOOL supportsTouchPad,
     284                                   BOOL needsHostCursor);
    280285    void i_onStateChange(MachineState_T aMachineState);
    281286    void i_onAdditionsStateChange();
  • trunk/src/VBox/Main/include/MouseImpl.h

    r95271 r95368  
    6969    HRESULT getAbsoluteSupported(BOOL *aAbsoluteSupported);
    7070    HRESULT getRelativeSupported(BOOL *aRelativeSupported);
    71     HRESULT getMultiTouchSupported(BOOL *aMultiTouchSupported);
     71    HRESULT getTouchScreenSupported(BOOL *aTouchScreenSupported);
     72    HRESULT getTouchPadSupported(BOOL *aTouchPadSupported);
    7273    HRESULT getNeedsHostCursor(BOOL *aNeedsHostCursor);
    7374    HRESULT getPointerShape(ComPtr<IMousePointerShape> &aPointerShape);
     
    8788    HRESULT putEventMultiTouch(LONG aCount,
    8889                               const std::vector<LONG64> &aContacts,
     90                               BOOL isTouchScreen,
    8991                               ULONG aScanTime);
    9092    HRESULT putEventMultiTouchString(LONG aCount,
    9193                                     const com::Utf8Str &aContacts,
     94                                     BOOL isTouchScreen,
    9295                                     ULONG aScanTime);
    9396
     
    105108    HRESULT i_reportMTEventToMouseDev(int32_t x, int32_t z, uint32_t cContact,
    106109                                    uint32_t fContact);
    107     HRESULT i_reportMultiTouchEventToDevice(uint8_t cContacts, const uint64_t *pau64Contacts, uint32_t u32ScanTime);
     110    HRESULT i_reportMultiTouchEventToDevice(uint8_t cContacts, const uint64_t *pau64Contacts, bool fTouchScreen, uint32_t u32ScanTime);
    108111    HRESULT i_reportAbsEventToVMMDev(int32_t x, int32_t y);
    109112    HRESULT i_reportAbsEventToInputDevices(int32_t x, int32_t y, int32_t dz, int32_t dw, uint32_t fButtons,
     
    112115    HRESULT i_convertDisplayRes(LONG x, LONG y, int32_t *pxAdj, int32_t *pyAdj,
    113116                                 bool *pfValid);
    114     HRESULT i_putEventMultiTouch(LONG aCount, const LONG64 *paContacts, ULONG aScanTime);
     117    HRESULT i_putEventMultiTouch(LONG aCount, const LONG64 *paContacts, BOOL isTouchScreen, ULONG aScanTime);
    115118
    116     void i_getDeviceCaps(bool *pfAbs, bool *pfRel, bool *fMT);
     119    void i_getDeviceCaps(bool *pfAbs, bool *pfRel, bool *pfTS, bool *pfTP);
    117120    void i_sendMouseCapsNotifications(void);
    118121    bool i_guestNeedsHostCursor(void);
     
    121124    bool i_supportsAbs(void);
    122125    bool i_supportsRel(void);
    123     bool i_supportsMT(void);
     126    bool i_supportsTS(void);
     127    bool i_supportsTP(void);
    124128
    125129    ConsoleMouseInterface * const         mParent;
     
    153157    void i_fireMultiTouchEvent(uint8_t cContacts,
    154158                               const LONG64 *paContacts,
     159                               bool fTouchScreen,
    155160                               uint32_t u32ScanTime);
    156161};
  • trunk/src/VBox/Main/src-client/ConsoleImpl.cpp

    r95330 r95368  
    75257525
    75267526void Console::i_onMouseCapabilityChange(BOOL supportsAbsolute, BOOL supportsRelative,
    7527                                         BOOL supportsMT, BOOL needsHostCursor)
    7528 {
    7529     LogFlowThisFunc(("supportsAbsolute=%d supportsRelative=%d needsHostCursor=%d\n",
    7530                      supportsAbsolute, supportsRelative, needsHostCursor));
     7527                                        BOOL supportsTouchScreen, BOOL supportsTouchPad, BOOL needsHostCursor)
     7528{
     7529    LogFlowThisFunc(("supportsAbsolute=%d supportsRelative=%d supportsTouchScreen=%d supportsTouchPad=%d needsHostCursor=%d\n",
     7530                     supportsAbsolute, supportsRelative, supportsTouchScreen, supportsTouchPad, needsHostCursor));
    75317531
    75327532    AutoCaller autoCaller(this);
    75337533    AssertComRCReturnVoid(autoCaller.rc());
    75347534
    7535     ::FireMouseCapabilityChangedEvent(mEventSource, supportsAbsolute, supportsRelative, supportsMT, needsHostCursor);
     7535    ::FireMouseCapabilityChangedEvent(mEventSource, supportsAbsolute, supportsRelative, supportsTouchScreen, supportsTouchPad, needsHostCursor);
    75367536}
    75377537
  • trunk/src/VBox/Main/src-client/ConsoleVRDPServer.cpp

    r94960 r95368  
    28792879                    pMouse->PutEventMultiTouch(pFrame->u16ContactCount,
    28802880                                               ComSafeArrayAsInParam(aContacts),
     2881                                               true /* isTouchScreen */,
    28812882                                               (ULONG)(pThis->mu64TouchInputTimestampMCS / 1000)); /* Micro->milliseconds. */
    28822883                }
  • trunk/src/VBox/Main/src-client/MouseImpl.cpp

    r95271 r95368  
    397397/**
    398398 * Returns whether the currently active device portfolio can accept multi-touch
    399  * mouse events.
     399 * touchscreen events.
    400400 *
    401401 * @returns COM status code
    402  * @param aMultiTouchSupported address of result variable
    403  */
    404 HRESULT Mouse::getMultiTouchSupported(BOOL *aMultiTouchSupported)
    405 {
    406     *aMultiTouchSupported = i_supportsMT();
     402 * @param aTouchScreenSupported address of result variable
     403 */
     404HRESULT Mouse::getTouchScreenSupported(BOOL *aTouchScreenSupported)
     405{
     406    *aTouchScreenSupported = i_supportsTS();
     407    return S_OK;
     408}
     409
     410/**
     411 * Returns whether the currently active device portfolio can accept multi-touch
     412 * touchpad events.
     413 *
     414 * @returns COM status code
     415 * @param aTouchPadSupported address of result variable
     416 */
     417HRESULT Mouse::getTouchPadSupported(BOOL *aTouchPadSupported)
     418{
     419    *aTouchPadSupported = i_supportsTP();
    407420    return S_OK;
    408421}
     
    563576HRESULT Mouse::i_reportMultiTouchEventToDevice(uint8_t cContacts,
    564577                                               const uint64_t *pau64Contacts,
     578                                               bool fTouchScreen,
    565579                                               uint32_t u32ScanTime)
    566580{
    567581    HRESULT hrc = S_OK;
    568582
     583    int match = fTouchScreen ? MOUSE_DEVCAP_MT_ABSOLUTE : MOUSE_DEVCAP_MT_RELATIVE;
    569584    PPDMIMOUSEPORT pUpPort = NULL;
    570585    {
     
    575590        {
    576591            if (   mpDrv[i]
    577                 && (mpDrv[i]->u32DevCaps & MOUSE_DEVCAP_MT_ABSOLUTE))
     592                && (mpDrv[i]->u32DevCaps & match))
    578593            {
    579594                pUpPort = mpDrv[i]->pUpPort;
     
    707722void Mouse::i_fireMultiTouchEvent(uint8_t cContacts,
    708723                                  const LONG64 *paContacts,
     724                                  bool fTouchScreen,
    709725                                  uint32_t u32ScanTime)
    710726{
     
    726742
    727743    ::FireGuestMultiTouchEvent(mEventSource, cContacts, ComSafeArrayAsInParam(xPositions), ComSafeArrayAsInParam(yPositions),
    728                                ComSafeArrayAsInParam(contactIds), ComSafeArrayAsInParam(contactFlags), u32ScanTime);
     744                               ComSafeArrayAsInParam(contactIds), ComSafeArrayAsInParam(contactFlags), fTouchScreen, u32ScanTime);
    729745}
    730746
     
    895911 * @param aCount     Number of contacts.
    896912 * @param aContacts  Information about each contact.
     913 * @param aIsTouchscreen Distinguishes between touchscreen and touchpad events.
    897914 * @param aScanTime  Timestamp.
    898915 */
    899916HRESULT Mouse::putEventMultiTouch(LONG aCount,
    900917                                  const std::vector<LONG64> &aContacts,
     918                                  BOOL aIsTouchscreen,
    901919                                  ULONG aScanTime)
    902920{
     
    910928        const LONG64 *paContacts = aCount > 0? &aContacts.front(): NULL;
    911929
    912         hrc = i_putEventMultiTouch(aCount, paContacts, aScanTime);
     930        hrc = i_putEventMultiTouch(aCount, paContacts, aIsTouchscreen, aScanTime);
    913931    }
    914932    else
     
    926944 * @param aCount     Number of contacts.
    927945 * @param aContacts  Information about each contact.
     946 * @param aIsTouchscreen Distinguishes between touchscreen and touchpad events.
    928947 * @param aScanTime  Timestamp.
    929948 */
    930949HRESULT Mouse::putEventMultiTouchString(LONG aCount,
    931950                                        const com::Utf8Str &aContacts,
     951                                        BOOL aIsTouchscreen,
    932952                                        ULONG aScanTime)
    933953{
     
    935955    NOREF(aCount);
    936956    NOREF(aContacts);
     957    NOREF(aIsTouchscreen);
    937958    NOREF(aScanTime);
    938959    return E_NOTIMPL;
     
    946967HRESULT Mouse::i_putEventMultiTouch(LONG aCount,
    947968                                    const LONG64 *paContacts,
     969                                    BOOL aIsTouchscreen,
    948970                                    ULONG aScanTime)
    949971{
     
    953975    }
    954976
    955     DisplayMouseInterface *pDisplay = mParent->i_getDisplayMouseInterface();
    956     ComAssertRet(pDisplay, E_FAIL);
    957 
    958     /* Touch events are mapped to the primary monitor, because the emulated USB
    959      * touchscreen device is associated with one (normally the primary) screen in the guest.
    960      */
     977    HRESULT hrc = S_OK;
     978
     979    /* Touch events in the touchscreen variant are currently mapped to the
     980     * primary monitor, because the emulated USB touchscreen device is
     981     * associated with one (normally the primary) screen in the guest.
     982     * In the future this could/should be extended to multi-screen support. */
    961983    ULONG uScreenId = 0;
    962984
    963985    ULONG cWidth  = 0;
    964986    ULONG cHeight = 0;
    965     ULONG cBPP    = 0;
    966987    LONG  xOrigin = 0;
    967988    LONG  yOrigin = 0;
    968     HRESULT hrc = pDisplay->i_getScreenResolution(uScreenId, &cWidth, &cHeight, &cBPP, &xOrigin, &yOrigin);
    969     NOREF(cBPP);
    970     ComAssertComRCRetRC(hrc);
     989
     990    if (aIsTouchscreen)
     991    {
     992        DisplayMouseInterface *pDisplay = mParent->i_getDisplayMouseInterface();
     993        ComAssertRet(pDisplay, E_FAIL);
     994        ULONG cBPP    = 0;
     995        hrc = pDisplay->i_getScreenResolution(uScreenId, &cWidth, &cHeight, &cBPP, &xOrigin, &yOrigin);
     996        NOREF(cBPP);
     997        ComAssertComRCRetRC(hrc);
     998    }
    971999
    9721000    uint64_t* pau64Contacts = NULL;
     
    9801008        if (pau64Contacts)
    9811009        {
    982             int32_t x1 = xOrigin;
    983             int32_t y1 = yOrigin;
    984             int32_t x2 = x1 + cWidth;
    985             int32_t y2 = y1 + cHeight;
    986 
    987             LogRel3(("%s: screen [%d] %d,%d %d,%d\n",
    988                      __FUNCTION__, uScreenId, x1, y1, x2, y2));
    989 
    990             LONG i;
    991             for (i = 0; i < aCount; i++)
     1010            if (aIsTouchscreen)
    9921011            {
    993                 uint32_t u32Lo = RT_LO_U32(paContacts[i]);
    994                 uint32_t u32Hi = RT_HI_U32(paContacts[i]);
    995                 int32_t x = (int16_t)u32Lo;
    996                 int32_t y = (int16_t)(u32Lo >> 16);
    997                 uint8_t contactId =  RT_BYTE1(u32Hi);
    998                 bool fInContact   = (RT_BYTE2(u32Hi) & 0x1) != 0;
    999                 bool fInRange     = (RT_BYTE2(u32Hi) & 0x2) != 0;
    1000 
    1001                 LogRel3(("%s: [%d] %d,%d id %d, inContact %d, inRange %d\n",
    1002                          __FUNCTION__, i, x, y, contactId, fInContact, fInRange));
    1003 
    1004                 /* x1,y1 are inclusive and x2,y2 are exclusive,
    1005                  * while x,y start from 1 and are inclusive.
    1006                  */
    1007                 if (x <= x1 || x > x2 || y <= y1 || y > y2)
     1012                int32_t x1 = xOrigin;
     1013                int32_t y1 = yOrigin;
     1014                int32_t x2 = x1 + cWidth;
     1015                int32_t y2 = y1 + cHeight;
     1016
     1017                LogRel3(("%s: screen [%d] %d,%d %d,%d\n",
     1018                         __FUNCTION__, uScreenId, x1, y1, x2, y2));
     1019
     1020                LONG i;
     1021                for (i = 0; i < aCount; i++)
    10081022                {
    1009                     /* Out of range. Skip the contact. */
    1010                     continue;
     1023                    uint32_t u32Lo = RT_LO_U32(paContacts[i]);
     1024                    uint32_t u32Hi = RT_HI_U32(paContacts[i]);
     1025                    int32_t x = (int16_t)u32Lo;
     1026                    int32_t y = (int16_t)(u32Lo >> 16);
     1027                    uint8_t contactId =  RT_BYTE1(u32Hi);
     1028                    bool fInContact   = (RT_BYTE2(u32Hi) & 0x1) != 0;
     1029                    bool fInRange     = (RT_BYTE2(u32Hi) & 0x2) != 0;
     1030
     1031                    LogRel3(("%s: touchscreen [%d] %d,%d id %d, inContact %d, inRange %d\n",
     1032                             __FUNCTION__, i, x, y, contactId, fInContact, fInRange));
     1033
     1034                    /* x1,y1 are inclusive and x2,y2 are exclusive,
     1035                     * while x,y start from 1 and are inclusive.
     1036                     */
     1037                    if (x <= x1 || x > x2 || y <= y1 || y > y2)
     1038                    {
     1039                        /* Out of range. Skip the contact. */
     1040                        continue;
     1041                    }
     1042
     1043                    int32_t xAdj = x1 < x2? ((x - 1 - x1) * VMMDEV_MOUSE_RANGE) / (x2 - x1) : 0;
     1044                    int32_t yAdj = y1 < y2? ((y - 1 - y1) * VMMDEV_MOUSE_RANGE) / (y2 - y1) : 0;
     1045
     1046                    bool fValid = (   xAdj >= VMMDEV_MOUSE_RANGE_MIN
     1047                                   && xAdj <= VMMDEV_MOUSE_RANGE_MAX
     1048                                   && yAdj >= VMMDEV_MOUSE_RANGE_MIN
     1049                                   && yAdj <= VMMDEV_MOUSE_RANGE_MAX);
     1050
     1051                    if (fValid)
     1052                    {
     1053                        uint8_t fu8 = (uint8_t)(  (fInContact? 0x01: 0x00)
     1054                                                | (fInRange?   0x02: 0x00));
     1055                        pau64Contacts[cContacts] = RT_MAKE_U64_FROM_U16((uint16_t)xAdj,
     1056                                                                        (uint16_t)yAdj,
     1057                                                                        RT_MAKE_U16(contactId, fu8),
     1058                                                                        0);
     1059                        cContacts++;
     1060                    }
    10111061                }
    1012 
    1013                 int32_t xAdj = x1 < x2? ((x - 1 - x1) * VMMDEV_MOUSE_RANGE) / (x2 - x1) : 0;
    1014                 int32_t yAdj = y1 < y2? ((y - 1 - y1) * VMMDEV_MOUSE_RANGE) / (y2 - y1) : 0;
    1015 
    1016                 bool fValid = (   xAdj >= VMMDEV_MOUSE_RANGE_MIN
    1017                                && xAdj <= VMMDEV_MOUSE_RANGE_MAX
    1018                                && yAdj >= VMMDEV_MOUSE_RANGE_MIN
    1019                                && yAdj <= VMMDEV_MOUSE_RANGE_MAX);
    1020 
    1021                 if (fValid)
     1062            } else {
     1063                LONG i;
     1064                for (i = 0; i < aCount; i++)
    10221065                {
    1023                     uint8_t fu8 = (uint8_t)(  (fInContact? 0x01: 0x00)
    1024                                             | (fInRange?   0x02: 0x00));
    1025                     pau64Contacts[cContacts] = RT_MAKE_U64_FROM_U16((uint16_t)xAdj,
    1026                                                                     (uint16_t)yAdj,
     1066                    uint32_t u32Lo = RT_LO_U32(paContacts[i]);
     1067                    uint32_t u32Hi = RT_HI_U32(paContacts[i]);
     1068                    uint16_t x = (uint16_t)u32Lo;
     1069                    uint16_t y = (uint16_t)(u32Lo >> 16);
     1070                    uint8_t contactId =  RT_BYTE1(u32Hi);
     1071                    bool fInContact   = (RT_BYTE2(u32Hi) & 0x1) != 0;
     1072
     1073                    LogRel3(("%s: touchpad [%d] %#04x,%#04x id %d, inContact %d\n",
     1074                             __FUNCTION__, i, x, y, contactId, fInContact));
     1075
     1076                    uint8_t fu8 = (uint8_t)(fInContact? 0x01: 0x00);
     1077
     1078                    pau64Contacts[cContacts] = RT_MAKE_U64_FROM_U16(x, y,
    10271079                                                                    RT_MAKE_U16(contactId, fu8),
    1028                                                                     0);
     1080                                                                     0);
    10291081                    cContacts++;
    10301082                }
     
    10391091    if (SUCCEEDED(hrc))
    10401092    {
    1041         hrc = i_reportMultiTouchEventToDevice(cContacts, cContacts? pau64Contacts: NULL, (uint32_t)aScanTime);
     1093        hrc = i_reportMultiTouchEventToDevice(cContacts, cContacts? pau64Contacts: NULL, !!aIsTouchscreen, (uint32_t)aScanTime);
    10421094
    10431095        /* Send the original contact information. */
    1044         i_fireMultiTouchEvent(cContacts, cContacts? paContacts: NULL, (uint32_t)aScanTime);
     1096        i_fireMultiTouchEvent(cContacts, cContacts? paContacts: NULL, !!aIsTouchscreen, (uint32_t)aScanTime);
    10451097    }
    10461098
     
    10641116 * @param   pfAbs   supports absolute mouse coordinates.
    10651117 * @param   pfRel   supports relative mouse coordinates.
    1066  * @param   pfMT    supports multitouch.
    1067  */
    1068 void Mouse::i_getDeviceCaps(bool *pfAbs, bool *pfRel, bool *pfMT)
     1118 * @param   pfTS    supports touchscreen.
     1119 * @param   pfTP    supports touchpad.
     1120 */
     1121void Mouse::i_getDeviceCaps(bool *pfAbs, bool *pfRel, bool *pfTS, bool *pfTP)
    10691122{
    10701123    bool fAbsDev = false;
    10711124    bool fRelDev = false;
    1072     bool fMTDev  = false;
     1125    bool fTSDev  = false;
     1126    bool fTPDev  = false;
    10731127
    10741128    AutoReadLock aLock(this COMMA_LOCKVAL_SRC_POS);
     
    10821136               fRelDev = true;
    10831137           if (mpDrv[i]->u32DevCaps & MOUSE_DEVCAP_MT_ABSOLUTE)
    1084                fMTDev  = true;
     1138               fTSDev  = true;
     1139           if (mpDrv[i]->u32DevCaps & MOUSE_DEVCAP_MT_RELATIVE)
     1140               fTPDev  = true;
    10851141        }
    10861142    if (pfAbs)
     
    10881144    if (pfRel)
    10891145        *pfRel = fRelDev;
    1090     if (pfMT)
    1091         *pfMT = fMTDev;
     1146    if (pfTS)
     1147        *pfTS = fTSDev;
     1148    if (pfTP)
     1149        *pfTP = fTPDev;
    10921150}
    10931151
     
    10981156    bool fRelDev;
    10991157
    1100     i_getDeviceCaps(NULL, &fRelDev, NULL);
     1158    i_getDeviceCaps(NULL, &fRelDev, NULL, NULL);
    11011159    return    (mfVMMDevGuestCaps & VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE)
    11021160           && fRelDev;
     
    11091167    bool fAbsDev;
    11101168
    1111     i_getDeviceCaps(&fAbsDev, NULL, NULL);
     1169    i_getDeviceCaps(&fAbsDev, NULL, NULL, NULL);
    11121170    return fAbsDev;
    11131171}
     
    11191177    bool fRelDev;
    11201178
    1121     i_getDeviceCaps(NULL, &fRelDev, NULL);
     1179    i_getDeviceCaps(NULL, &fRelDev, NULL, NULL);
    11221180    return fRelDev;
    11231181}
     
    11291187    bool fAbsDev;
    11301188
    1131     i_getDeviceCaps(&fAbsDev, NULL, NULL);
     1189    i_getDeviceCaps(&fAbsDev, NULL, NULL, NULL);
    11321190    return fAbsDev || i_vmmdevCanAbs();
    11331191}
     
    11351193
    11361194/** Can we currently send absolute events to the guest? */
    1137 bool Mouse::i_supportsMT(void)
    1138 {
    1139     bool fMTDev;
    1140 
    1141     i_getDeviceCaps(NULL, NULL, &fMTDev);
    1142     return fMTDev;
     1195bool Mouse::i_supportsTS(void)
     1196{
     1197    bool fTSDev;
     1198
     1199    i_getDeviceCaps(NULL, NULL, &fTSDev, NULL);
     1200    return fTSDev;
    11431201}
    11441202
     
    11491207void Mouse::i_sendMouseCapsNotifications(void)
    11501208{
    1151     bool fRelDev, fMTDev, fCanAbs, fNeedsHostCursor;
     1209    bool fRelDev, fTSDev, fTPDev, fCanAbs, fNeedsHostCursor;
    11521210
    11531211    {
    11541212        AutoReadLock aLock(this COMMA_LOCKVAL_SRC_POS);
    11551213
    1156         i_getDeviceCaps(NULL, &fRelDev, &fMTDev);
     1214        i_getDeviceCaps(NULL, &fRelDev, &fTSDev, &fTPDev);
    11571215        fCanAbs = i_supportsAbs();
    11581216        fNeedsHostCursor = i_guestNeedsHostCursor();
    11591217    }
    1160     mParent->i_onMouseCapabilityChange(fCanAbs, fRelDev, fMTDev, fNeedsHostCursor);
     1218    mParent->i_onMouseCapabilityChange(fCanAbs, fRelDev, fTSDev, fTPDev, fNeedsHostCursor);
    11611219}
    11621220
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette