Changeset 95368 in vbox
- Timestamp:
- Jun 24, 2022 7:41:25 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/doc/manual/en_US/man_VBoxManage-modifyvm.xml
r94070 r95368 386 386 <arg choice="plain">usbtablet</arg> 387 387 <arg choice="plain">usbmultitouch</arg> 388 <arg choice="plain">usbmtscreenpluspad</arg> 388 389 </group></arg> 389 390 <arg>--keyboard=<group choice="plain"> … … 1752 1753 <variablelist> 1753 1754 <varlistentry> 1754 <term><option>--mouse=ps2 | usb | usbtablet | usbmultitouch </option></term>1755 <term><option>--mouse=ps2 | usb | usbtablet | usbmultitouch | usbmtscreenpluspad</option></term> 1755 1756 <listitem><para> 1756 1757 Specifies the mode of the mouse to use in the VM. Valid 1757 1758 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>. 1760 1762 </para></listitem> 1761 1763 </varlistentry> -
trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
r95366 r95368 2283 2283 fEnableUsb = true; 2284 2284 } 2285 else if (!RTStrICmp(ValueUnion.psz, "usbmtscreenpluspad")) 2286 { 2287 CHECK_ERROR(sessionMachine, COMSETTER(PointingHIDType)(PointingHIDType_USBMultiTouchScreenPlusPad)); 2288 if (SUCCEEDED(hrc)) 2289 fEnableUsb = true; 2290 } 2285 2291 else if (!RTStrICmp(ValueUnion.psz, "none")) 2286 2292 { -
trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendCOM.cpp
r95364 r95368 285 285 switch (type) 286 286 { 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"); 293 294 default: AssertMsgFailed(("No text for %d", type)); break; 294 295 } -
trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.cpp
r95138 r95368 428 428 CMouseCapabilityChangedEvent comEventSpecific(pEvent); 429 429 emit sigMouseCapabilityChange(comEventSpecific.GetSupportsAbsolute(), comEventSpecific.GetSupportsRelative(), 430 comEventSpecific.GetSupportsMultiTouch(), comEventSpecific.GetNeedsHostCursor()); 430 comEventSpecific.GetSupportsTouchScreen(), comEventSpecific.GetSupportsTouchPad(), 431 comEventSpecific.GetNeedsHostCursor()); 431 432 break; 432 433 } -
trunk/src/VBox/Frontends/VirtualBox/src/globals/UIMainEventListener.h
r94737 r95368 149 149 /** Notifies about mouse pointer @a shapeData change. */ 150 150 void sigMousePointerShapeChange(const UIMousePointerShapeData &shapeData); 151 /** Notifies about mouse capability change to @a fSupportsAbsolute, @a fSupportsRelative, @a fSupportsM ultiTouchand @a fNeedsHostCursor. */152 void sigMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fSupportsM ultiTouch, 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); 153 153 /** Notifies about guest request to change the cursor position to @a uX * @a uY. 154 154 * @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 44 44 /** Notifies about mouse pointer @a shapeData change. */ 45 45 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); 48 51 /** Notifies about guest request to change the cursor position to @a uX * @a uY. 49 52 * @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 49 49 /** Notifies about mouse pointer @a shapeData change. */ 50 50 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); 53 56 /** Notifies about guest request to change the cursor position to @a uX * @a uY. 54 57 * @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 593 593 bool fIsMouseSupportsAbsolute = uisession()->isMouseSupportsAbsolute(); 594 594 bool fIsMouseSupportsRelative = uisession()->isMouseSupportsRelative(); 595 bool fIsMouseSupportsMultiTouch = uisession()->isMouseSupportsMultiTouch(); 595 bool fIsMouseSupportsTouchScreen = uisession()->isMouseSupportsTouchScreen(); 596 bool fIsMouseSupportsTouchPad = uisession()->isMouseSupportsTouchPad(); 596 597 bool fIsMouseHostCursorNeeded = uisession()->isMouseHostCursorNeeded(); 597 598 598 599 /* For now MT stuff is not important for MI action: */ 599 Q_UNUSED(fIsMouseSupportsMultiTouch); 600 Q_UNUSED(fIsMouseSupportsTouchScreen); 601 Q_UNUSED(fIsMouseSupportsTouchPad); 600 602 601 603 /* Update action state: */ -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMouseHandler.cpp
r94064 r95368 746 746 case QEvent::TouchEnd: 747 747 { 748 if (uisession()->isMouseSupports MultiTouch())748 if (uisession()->isMouseSupportsTouchScreen() || uisession()->isMouseSupportsTouchPad()) 749 749 return multiTouchEvent(static_cast<QTouchEvent*>(pEvent), uScreenId); 750 750 break; … … 912 912 { 913 913 /* Ignore fake mouse events. */ 914 if (uisession()->isMouseSupportsMultiTouch() && mouseIsTouchSource(iEventType, mouseButtons)) 914 if ( (uisession()->isMouseSupportsTouchScreen() || uisession()->isMouseSupportsTouchPad()) 915 && mouseIsTouchSource(iEventType, mouseButtons)) 915 916 return true; 916 917 … … 1194 1195 1195 1196 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 } 1199 1203 1200 1204 /* Pass all multi-touch events into guest: */ … … 1202 1206 foreach (const QTouchEvent::TouchPoint &touchPoint, pTouchEvent->touchPoints()) 1203 1207 { 1204 /* Get touch-point origin: */1205 QPoint currentTouchPoint = touchPoint.pos().toPoint();1206 1207 1208 /* Get touch-point state: */ 1208 1209 LONG iTouchPointState = KTouchContactState_None; … … 1212 1213 case Qt::TouchPointMoved: 1213 1214 case Qt::TouchPointStationary: 1214 iTouchPointState = KTouchContactState_InContact | KTouchContactState_InRange; 1215 iTouchPointState = KTouchContactState_InContact; 1216 if (pTouchEvent->device()->type() == QTouchDevice::TouchScreen) 1217 iTouchPointState |= KTouchContactState_InRange; 1215 1218 break; 1216 1219 default: … … 1218 1221 } 1219 1222 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 } 1228 1250 1229 1251 LogRelFlow(("UIMouseHandler::multiTouchEvent: %RX64\n", contacts[iTouchPointIndex])); … … 1234 1256 mouse().PutEventMultiTouch(pTouchEvent->touchPoints().size(), 1235 1257 contacts, 1258 pTouchEvent->device()->type() == QTouchDevice::TouchScreen, 1236 1259 (ULONG)RTTimeMilliTS()); 1237 1260 -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
r94986 r95368 210 210 m_fIsMouseSupportsAbsolute = mouse().GetAbsoluteSupported(); 211 211 m_fIsMouseSupportsRelative = mouse().GetRelativeSupported(); 212 m_fIsMouseSupportsMultiTouch = mouse().GetMultiTouchSupported(); 212 m_fIsMouseSupportsTouchScreen = mouse().GetTouchScreenSupported(); 213 m_fIsMouseSupportsTouchPad = mouse().GetTouchPadSupported(); 213 214 m_fIsMouseHostCursorNeeded = mouse().GetNeedsHostCursor(); 214 215 sltAdditionsChange(); … … 510 511 } 511 512 512 void UISession::sltMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, bool fSupportsMultiTouch, bool fNeedsHostCursor) 513 void UISession::sltMouseCapabilityChange(bool fSupportsAbsolute, bool fSupportsRelative, 514 bool fSupportsTouchScreen, bool fSupportsTouchPad, 515 bool fNeedsHostCursor) 513 516 { 514 517 LogRelFlow(("GUI: UISession::sltMouseCapabilityChange: " 515 518 "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", 517 521 fSupportsAbsolute ? "TRUE" : "FALSE", fSupportsRelative ? "TRUE" : "FALSE", 518 fSupportsMultiTouch ? "TRUE" : "FALSE", fNeedsHostCursor ? "TRUE" : "FALSE")); 522 fSupportsTouchScreen ? "TRUE" : "FALSE", fSupportsTouchPad ? "TRUE" : "FALSE", 523 fNeedsHostCursor ? "TRUE" : "FALSE")); 519 524 520 525 /* Check if something had changed: */ 521 526 if ( m_fIsMouseSupportsAbsolute != fSupportsAbsolute 522 527 || m_fIsMouseSupportsRelative != fSupportsRelative 523 || m_fIsMouseSupportsMultiTouch != fSupportsMultiTouch 528 || m_fIsMouseSupportsTouchScreen != fSupportsTouchScreen 529 || m_fIsMouseSupportsTouchPad != fSupportsTouchPad 524 530 || m_fIsMouseHostCursorNeeded != fNeedsHostCursor) 525 531 { … … 527 533 m_fIsMouseSupportsAbsolute = fSupportsAbsolute; 528 534 m_fIsMouseSupportsRelative = fSupportsRelative; 529 m_fIsMouseSupportsMultiTouch = fSupportsMultiTouch; 535 m_fIsMouseSupportsTouchScreen = fSupportsTouchScreen; 536 m_fIsMouseSupportsTouchPad = fSupportsTouchPad; 530 537 m_fIsMouseHostCursorNeeded = fNeedsHostCursor; 531 538 … … 892 899 , m_fIsMouseSupportsAbsolute(false) 893 900 , m_fIsMouseSupportsRelative(false) 894 , m_fIsMouseSupportsMultiTouch(false) 901 , m_fIsMouseSupportsTouchScreen(false) 902 , m_fIsMouseSupportsTouchPad(false) 895 903 , m_fIsMouseHostCursorNeeded(false) 896 904 , m_fIsMouseCaptured(false) -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h
r93115 r95368 209 209 bool isMouseSupportsAbsolute() const { return m_fIsMouseSupportsAbsolute; } 210 210 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; } 212 213 bool isMouseHostCursorNeeded() const { return m_fIsMouseHostCursorNeeded; } 213 214 bool isMouseCaptured() const { return m_fIsMouseCaptured; } … … 368 369 /** Handles signal about mouse pointer @a shapeData change. */ 369 370 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); 372 376 /** Handles signal about guest request to change the cursor position to @a uX * @a uY. 373 377 * @param fContainsData Brings whether the @a uX and @a uY values are valid and could be used by the GUI now. */ … … 587 591 bool m_fIsMouseSupportsAbsolute : 1; 588 592 bool m_fIsMouseSupportsRelative : 1; 589 bool m_fIsMouseSupportsMultiTouch: 1; 593 bool m_fIsMouseSupportsTouchScreen: 1; 594 bool m_fIsMouseSupportsTouchPad: 1; 590 595 bool m_fIsMouseHostCursorNeeded : 1; 591 596 bool m_fIsMouseCaptured : 1; -
trunk/src/VBox/Main/idl/VirtualBox.xidl
r95365 r95368 1445 1445 <enum 1446 1446 name="PointingHIDType" 1447 uuid=" 19964e93-0050-45c4-9382-a7bccc53e666"1447 uuid="b3fd8215-6870-4e61-b6d9-2998fa625de0" 1448 1448 > 1449 1449 <desc> … … 1473 1473 <const name="USBMultiTouch" value="6"> 1474 1474 <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. 1476 1483 </desc> 1477 1484 </const> … … 1968 1975 <method name="removePortForwardRule"> 1969 1976 <rest request="post" path="/natnetworks/{networkid}/configuration/"/> 1970 <param name="i Sipv6" type="boolean" dir="in"/>1977 <param name="isIpv6" type="boolean" dir="in"/> 1971 1978 <param name="ruleName" type="wstring" dir="in"/> 1972 1979 </method> … … 19976 19983 <interface 19977 19984 name="IMouse" extends="$unknown" 19978 uuid=" 10cd08d0-e8b8-4838-b10c-45ba193734c1"19985 uuid="25360a74-55e5-4f14-ac2a-f5cf8e62e4af" 19979 19986 wsmap="managed" 19980 19987 rest="managed" … … 20015 20022 </attribute> 20016 20023 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. 20020 20041 <note> 20021 20042 You can use the <link to="IMouseCapabilityChangedEvent"/> … … 20168 20189 <method name="putEventMultiTouch"> 20169 20190 <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. 20173 20195 20174 20196 <result name="E_ACCESSDENIED"> … … 20183 20205 </note> 20184 20206 20185 <see><link to="# multiTouchSupported"/></see>20207 <see><link to="#touchScreenSupported"/> and <link to="#touchPadSupported"/></see> 20186 20208 </desc> 20187 20209 … … 20195 20217 <desc> 20196 20218 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. 20199 20221 Bits 32..39: contact identifier. 20200 20222 Bit 40: "in contact" flag, which indicates that there is a contact with the touch surface. … … 20204 20226 </param> 20205 20227 20228 <param name="isTouchScreen" type="boolean" dir="in"> 20229 <desc> 20230 Distinguishes between touchscreen and touchpad events. 20231 </desc> 20232 </param> 20233 20206 20234 <param name="scanTime" type="unsigned long" dir="in"> 20207 20235 <desc> … … 20227 20255 "id1,x1,y1,inContact1,inRange1;...;idN,xN,yN,inContactN,inRangeN". 20228 20256 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. 20229 20263 </desc> 20230 20264 </param> … … 26021 26055 <const name="OnGuestMultiTouch" value="93"> 26022 26056 <desc> 26023 See <link to="IGuestM ouseEvent">IGuestMouseEvent</link>.26057 See <link to="IGuestMultiTouchEvent">IGuestMultiTouchEvent</link>. 26024 26058 </desc> 26025 26059 </const> … … 26759 26793 <interface 26760 26794 name="IMouseCapabilityChangedEvent" extends="IEvent" 26761 uuid=" 70e7779a-e64a-4908-804e-371cad23a756"26795 uuid="4a773393-7a8c-4d57-b228-9ade4049a81f" 26762 26796 wsmap="managed" autogen="VBoxEvent" id="OnMouseCapabilityChanged" 26763 26797 > … … 26776 26810 </desc> 26777 26811 </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. 26781 26820 </desc> 26782 26821 </attribute> … … 27124 27163 <interface 27125 27164 name="IGuestMultiTouchEvent" extends="IEvent" 27126 uuid=" be8a0eb5-f4f4-4dd0-9d30-c89b873247ec"27165 uuid="1f99d9dc-c144-4c28-9f88-e6f488db5441" 27127 27166 wsmap="managed" autogen="VBoxEvent" id="OnGuestMultiTouch" 27128 27167 > … … 27155 27194 Bit 0: in contact. 27156 27195 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. 27157 27201 </desc> 27158 27202 </attribute> -
trunk/src/VBox/Main/include/ConsoleImpl.h
r94804 r95368 122 122 virtual void i_onMouseCapabilityChange(BOOL supportsAbsolute, 123 123 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 } 126 130 }; 127 131 … … 277 281 uint32_t cbShape); 278 282 void i_onMouseCapabilityChange(BOOL supportsAbsolute, BOOL supportsRelative, 279 BOOL supportsMT, BOOL needsHostCursor); 283 BOOL supportsTouchScreen, BOOL supportsTouchPad, 284 BOOL needsHostCursor); 280 285 void i_onStateChange(MachineState_T aMachineState); 281 286 void i_onAdditionsStateChange(); -
trunk/src/VBox/Main/include/MouseImpl.h
r95271 r95368 69 69 HRESULT getAbsoluteSupported(BOOL *aAbsoluteSupported); 70 70 HRESULT getRelativeSupported(BOOL *aRelativeSupported); 71 HRESULT getMultiTouchSupported(BOOL *aMultiTouchSupported); 71 HRESULT getTouchScreenSupported(BOOL *aTouchScreenSupported); 72 HRESULT getTouchPadSupported(BOOL *aTouchPadSupported); 72 73 HRESULT getNeedsHostCursor(BOOL *aNeedsHostCursor); 73 74 HRESULT getPointerShape(ComPtr<IMousePointerShape> &aPointerShape); … … 87 88 HRESULT putEventMultiTouch(LONG aCount, 88 89 const std::vector<LONG64> &aContacts, 90 BOOL isTouchScreen, 89 91 ULONG aScanTime); 90 92 HRESULT putEventMultiTouchString(LONG aCount, 91 93 const com::Utf8Str &aContacts, 94 BOOL isTouchScreen, 92 95 ULONG aScanTime); 93 96 … … 105 108 HRESULT i_reportMTEventToMouseDev(int32_t x, int32_t z, uint32_t cContact, 106 109 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); 108 111 HRESULT i_reportAbsEventToVMMDev(int32_t x, int32_t y); 109 112 HRESULT i_reportAbsEventToInputDevices(int32_t x, int32_t y, int32_t dz, int32_t dw, uint32_t fButtons, … … 112 115 HRESULT i_convertDisplayRes(LONG x, LONG y, int32_t *pxAdj, int32_t *pyAdj, 113 116 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); 115 118 116 void i_getDeviceCaps(bool *pfAbs, bool *pfRel, bool * fMT);119 void i_getDeviceCaps(bool *pfAbs, bool *pfRel, bool *pfTS, bool *pfTP); 117 120 void i_sendMouseCapsNotifications(void); 118 121 bool i_guestNeedsHostCursor(void); … … 121 124 bool i_supportsAbs(void); 122 125 bool i_supportsRel(void); 123 bool i_supportsMT(void); 126 bool i_supportsTS(void); 127 bool i_supportsTP(void); 124 128 125 129 ConsoleMouseInterface * const mParent; … … 153 157 void i_fireMultiTouchEvent(uint8_t cContacts, 154 158 const LONG64 *paContacts, 159 bool fTouchScreen, 155 160 uint32_t u32ScanTime); 156 161 }; -
trunk/src/VBox/Main/src-client/ConsoleImpl.cpp
r95330 r95368 7525 7525 7526 7526 void Console::i_onMouseCapabilityChange(BOOL supportsAbsolute, BOOL supportsRelative, 7527 BOOL supports MT, 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)); 7531 7531 7532 7532 AutoCaller autoCaller(this); 7533 7533 AssertComRCReturnVoid(autoCaller.rc()); 7534 7534 7535 ::FireMouseCapabilityChangedEvent(mEventSource, supportsAbsolute, supportsRelative, supports MT, needsHostCursor);7535 ::FireMouseCapabilityChangedEvent(mEventSource, supportsAbsolute, supportsRelative, supportsTouchScreen, supportsTouchPad, needsHostCursor); 7536 7536 } 7537 7537 -
trunk/src/VBox/Main/src-client/ConsoleVRDPServer.cpp
r94960 r95368 2879 2879 pMouse->PutEventMultiTouch(pFrame->u16ContactCount, 2880 2880 ComSafeArrayAsInParam(aContacts), 2881 true /* isTouchScreen */, 2881 2882 (ULONG)(pThis->mu64TouchInputTimestampMCS / 1000)); /* Micro->milliseconds. */ 2882 2883 } -
trunk/src/VBox/Main/src-client/MouseImpl.cpp
r95271 r95368 397 397 /** 398 398 * Returns whether the currently active device portfolio can accept multi-touch 399 * mouseevents.399 * touchscreen events. 400 400 * 401 401 * @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 */ 404 HRESULT 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 */ 417 HRESULT Mouse::getTouchPadSupported(BOOL *aTouchPadSupported) 418 { 419 *aTouchPadSupported = i_supportsTP(); 407 420 return S_OK; 408 421 } … … 563 576 HRESULT Mouse::i_reportMultiTouchEventToDevice(uint8_t cContacts, 564 577 const uint64_t *pau64Contacts, 578 bool fTouchScreen, 565 579 uint32_t u32ScanTime) 566 580 { 567 581 HRESULT hrc = S_OK; 568 582 583 int match = fTouchScreen ? MOUSE_DEVCAP_MT_ABSOLUTE : MOUSE_DEVCAP_MT_RELATIVE; 569 584 PPDMIMOUSEPORT pUpPort = NULL; 570 585 { … … 575 590 { 576 591 if ( mpDrv[i] 577 && (mpDrv[i]->u32DevCaps & MOUSE_DEVCAP_MT_ABSOLUTE))592 && (mpDrv[i]->u32DevCaps & match)) 578 593 { 579 594 pUpPort = mpDrv[i]->pUpPort; … … 707 722 void Mouse::i_fireMultiTouchEvent(uint8_t cContacts, 708 723 const LONG64 *paContacts, 724 bool fTouchScreen, 709 725 uint32_t u32ScanTime) 710 726 { … … 726 742 727 743 ::FireGuestMultiTouchEvent(mEventSource, cContacts, ComSafeArrayAsInParam(xPositions), ComSafeArrayAsInParam(yPositions), 728 ComSafeArrayAsInParam(contactIds), ComSafeArrayAsInParam(contactFlags), u32ScanTime);744 ComSafeArrayAsInParam(contactIds), ComSafeArrayAsInParam(contactFlags), fTouchScreen, u32ScanTime); 729 745 } 730 746 … … 895 911 * @param aCount Number of contacts. 896 912 * @param aContacts Information about each contact. 913 * @param aIsTouchscreen Distinguishes between touchscreen and touchpad events. 897 914 * @param aScanTime Timestamp. 898 915 */ 899 916 HRESULT Mouse::putEventMultiTouch(LONG aCount, 900 917 const std::vector<LONG64> &aContacts, 918 BOOL aIsTouchscreen, 901 919 ULONG aScanTime) 902 920 { … … 910 928 const LONG64 *paContacts = aCount > 0? &aContacts.front(): NULL; 911 929 912 hrc = i_putEventMultiTouch(aCount, paContacts, a ScanTime);930 hrc = i_putEventMultiTouch(aCount, paContacts, aIsTouchscreen, aScanTime); 913 931 } 914 932 else … … 926 944 * @param aCount Number of contacts. 927 945 * @param aContacts Information about each contact. 946 * @param aIsTouchscreen Distinguishes between touchscreen and touchpad events. 928 947 * @param aScanTime Timestamp. 929 948 */ 930 949 HRESULT Mouse::putEventMultiTouchString(LONG aCount, 931 950 const com::Utf8Str &aContacts, 951 BOOL aIsTouchscreen, 932 952 ULONG aScanTime) 933 953 { … … 935 955 NOREF(aCount); 936 956 NOREF(aContacts); 957 NOREF(aIsTouchscreen); 937 958 NOREF(aScanTime); 938 959 return E_NOTIMPL; … … 946 967 HRESULT Mouse::i_putEventMultiTouch(LONG aCount, 947 968 const LONG64 *paContacts, 969 BOOL aIsTouchscreen, 948 970 ULONG aScanTime) 949 971 { … … 953 975 } 954 976 955 DisplayMouseInterface *pDisplay = mParent->i_getDisplayMouseInterface();956 ComAssertRet(pDisplay, E_FAIL); 957 958 /* Touch events are mapped to the primary monitor, because the emulated USB959 * touchscreen device isassociated 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. */ 961 983 ULONG uScreenId = 0; 962 984 963 985 ULONG cWidth = 0; 964 986 ULONG cHeight = 0; 965 ULONG cBPP = 0;966 987 LONG xOrigin = 0; 967 988 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 } 971 999 972 1000 uint64_t* pau64Contacts = NULL; … … 980 1008 if (pau64Contacts) 981 1009 { 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) 992 1011 { 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++) 1008 1022 { 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 } 1011 1061 } 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++) 1022 1065 { 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, 1027 1079 RT_MAKE_U16(contactId, fu8), 1028 0);1080 0); 1029 1081 cContacts++; 1030 1082 } … … 1039 1091 if (SUCCEEDED(hrc)) 1040 1092 { 1041 hrc = i_reportMultiTouchEventToDevice(cContacts, cContacts? pau64Contacts: NULL, (uint32_t)aScanTime);1093 hrc = i_reportMultiTouchEventToDevice(cContacts, cContacts? pau64Contacts: NULL, !!aIsTouchscreen, (uint32_t)aScanTime); 1042 1094 1043 1095 /* 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); 1045 1097 } 1046 1098 … … 1064 1116 * @param pfAbs supports absolute mouse coordinates. 1065 1117 * @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 */ 1121 void Mouse::i_getDeviceCaps(bool *pfAbs, bool *pfRel, bool *pfTS, bool *pfTP) 1069 1122 { 1070 1123 bool fAbsDev = false; 1071 1124 bool fRelDev = false; 1072 bool fMTDev = false; 1125 bool fTSDev = false; 1126 bool fTPDev = false; 1073 1127 1074 1128 AutoReadLock aLock(this COMMA_LOCKVAL_SRC_POS); … … 1082 1136 fRelDev = true; 1083 1137 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; 1085 1141 } 1086 1142 if (pfAbs) … … 1088 1144 if (pfRel) 1089 1145 *pfRel = fRelDev; 1090 if (pfMT) 1091 *pfMT = fMTDev; 1146 if (pfTS) 1147 *pfTS = fTSDev; 1148 if (pfTP) 1149 *pfTP = fTPDev; 1092 1150 } 1093 1151 … … 1098 1156 bool fRelDev; 1099 1157 1100 i_getDeviceCaps(NULL, &fRelDev, NULL );1158 i_getDeviceCaps(NULL, &fRelDev, NULL, NULL); 1101 1159 return (mfVMMDevGuestCaps & VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE) 1102 1160 && fRelDev; … … 1109 1167 bool fAbsDev; 1110 1168 1111 i_getDeviceCaps(&fAbsDev, NULL, NULL );1169 i_getDeviceCaps(&fAbsDev, NULL, NULL, NULL); 1112 1170 return fAbsDev; 1113 1171 } … … 1119 1177 bool fRelDev; 1120 1178 1121 i_getDeviceCaps(NULL, &fRelDev, NULL );1179 i_getDeviceCaps(NULL, &fRelDev, NULL, NULL); 1122 1180 return fRelDev; 1123 1181 } … … 1129 1187 bool fAbsDev; 1130 1188 1131 i_getDeviceCaps(&fAbsDev, NULL, NULL );1189 i_getDeviceCaps(&fAbsDev, NULL, NULL, NULL); 1132 1190 return fAbsDev || i_vmmdevCanAbs(); 1133 1191 } … … 1135 1193 1136 1194 /** Can we currently send absolute events to the guest? */ 1137 bool Mouse::i_supports MT(void)1138 { 1139 bool f MTDev;1140 1141 i_getDeviceCaps(NULL, NULL, &f MTDev);1142 return f MTDev;1195 bool Mouse::i_supportsTS(void) 1196 { 1197 bool fTSDev; 1198 1199 i_getDeviceCaps(NULL, NULL, &fTSDev, NULL); 1200 return fTSDev; 1143 1201 } 1144 1202 … … 1149 1207 void Mouse::i_sendMouseCapsNotifications(void) 1150 1208 { 1151 bool fRelDev, f MTDev, fCanAbs, fNeedsHostCursor;1209 bool fRelDev, fTSDev, fTPDev, fCanAbs, fNeedsHostCursor; 1152 1210 1153 1211 { 1154 1212 AutoReadLock aLock(this COMMA_LOCKVAL_SRC_POS); 1155 1213 1156 i_getDeviceCaps(NULL, &fRelDev, &f MTDev);1214 i_getDeviceCaps(NULL, &fRelDev, &fTSDev, &fTPDev); 1157 1215 fCanAbs = i_supportsAbs(); 1158 1216 fNeedsHostCursor = i_guestNeedsHostCursor(); 1159 1217 } 1160 mParent->i_onMouseCapabilityChange(fCanAbs, fRelDev, f MTDev, fNeedsHostCursor);1218 mParent->i_onMouseCapabilityChange(fCanAbs, fRelDev, fTSDev, fTPDev, fNeedsHostCursor); 1161 1219 } 1162 1220
Note:
See TracChangeset
for help on using the changeset viewer.