Changeset 22096 in vbox
- Timestamp:
- Aug 7, 2009 10:27:55 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 50845
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/VMMDev.h
r21981 r22096 257 257 /** The guest can read VMMDev events to find out about pointer movement */ 258 258 #define VMMDEV_MOUSE_GUEST_USES_VMMDEV RT_BIT(4) 259 /** The mask of all VMMDEV_MOUSE_* flags */ 260 #define VMMDEV_MOUSE_MASK UINT32_C(0x0000001f) 261 /** The mask of guest capability changes for which notification events should 262 * be sent */ 263 #define VMMDEV_MOUSE_NOTIFY_HOST_MASK \ 264 (VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE | VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR) 265 /** The mask of all capabilities which the guest can legitimately change */ 266 #define VMMDEV_MOUSE_GUEST_MASK \ 267 (VMMDEV_MOUSE_NOTIFY_HOST_MASK | VMMDEV_MOUSE_GUEST_USES_VMMDEV) 259 268 /** @} */ 260 269 -
trunk/src/VBox/Devices/VMMDev/VMMDev.cpp
r21645 r22096 600 600 { 601 601 VMMDevReqMouseStatus *mouseStatus = (VMMDevReqMouseStatus*)pRequestHeader; 602 mouseStatus->mouseFeatures = 0; 603 if (pThis->mouseCapabilities & VMMDEV_MOUSE_HOST_CAN_ABSOLUTE) 604 { 605 mouseStatus->mouseFeatures |= VMMDEV_MOUSE_HOST_CAN_ABSOLUTE; 606 } 607 if (pThis->mouseCapabilities & VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE) 608 { 609 mouseStatus->mouseFeatures |= VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE; 610 } 611 if (pThis->mouseCapabilities & VMMDEV_MOUSE_HOST_CANNOT_HWPOINTER) 612 { 613 mouseStatus->mouseFeatures |= VMMDEV_MOUSE_HOST_CANNOT_HWPOINTER; 614 } 602 mouseStatus->mouseFeatures = pThis->mouseCapabilities 603 & VMMDEV_MOUSE_MASK; 615 604 mouseStatus->pointerXPos = pThis->mouseXAbs; 616 605 mouseStatus->pointerYPos = pThis->mouseYAbs; 617 Log2(("returning mouse status: features = %d, absX = %d, absY = %d\n", mouseStatus->mouseFeatures, 618 mouseStatus->pointerXPos, mouseStatus->pointerYPos)); 606 LogRel2(("%s: VMMDevReq_GetMouseStatus: features = 0x%x, absX = %d, absY = %d\n", 607 __PRETTY_FUNCTION__, 608 mouseStatus->mouseFeatures, 609 mouseStatus->pointerXPos, 610 mouseStatus->pointerYPos)); 619 611 pRequestHeader->rc = VINF_SUCCESS; 620 612 } … … 635 627 else 636 628 { 637 bool bCapsChanged = false; 638 639 VMMDevReqMouseStatus *mouseStatus = (VMMDevReqMouseStatus*)pRequestHeader; 640 641 /* check if the guest wants absolute coordinates */ 642 if (mouseStatus->mouseFeatures & VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE) 643 { 644 /* set the capability flag and the changed flag if it's actually a change */ 645 if (!(pThis->mouseCapabilities & VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE)) 646 { 647 pThis->mouseCapabilities |= VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE; 648 bCapsChanged = true; 649 LogRel(("Guest requests mouse pointer integration\n")); 650 } 651 } else 652 { 653 if (pThis->mouseCapabilities & VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE) 654 { 655 pThis->mouseCapabilities &= ~VMMDEV_MOUSE_GUEST_CAN_ABSOLUTE; 656 bCapsChanged = true; 657 LogRel(("Guest disables mouse pointer integration\n")); 658 } 659 } 660 if (mouseStatus->mouseFeatures & VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR) 661 pThis->mouseCapabilities |= VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR; 662 else 663 pThis->mouseCapabilities &= ~VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR; 664 if (mouseStatus->mouseFeatures & VMMDEV_MOUSE_GUEST_USES_VMMDEV) 665 pThis->mouseCapabilities |= VMMDEV_MOUSE_GUEST_USES_VMMDEV; 666 else 667 pThis->mouseCapabilities &= ~VMMDEV_MOUSE_GUEST_USES_VMMDEV; 629 bool fNotify = false; 630 631 uint32_t fFeatures = 632 ((VMMDevReqMouseStatus*)pRequestHeader)->mouseFeatures; 633 634 LogRelFlowFunc(("VMMDevReqMouseStatus: mouseFeatures = 0x%x\n", 635 fFeatures)); 636 637 if ( (fFeatures & VMMDEV_MOUSE_NOTIFY_HOST_MASK) 638 != ( pThis->mouseCapabilities 639 & VMMDEV_MOUSE_NOTIFY_HOST_MASK)) 640 fNotify = true; 641 pThis->mouseCapabilities &= ~VMMDEV_MOUSE_GUEST_MASK; 642 pThis->mouseCapabilities |= 643 (fFeatures & VMMDEV_MOUSE_GUEST_MASK); 644 LogRelFlowFunc(("VMMDevReq_SetMouseStatus: new host capabilities: 0x%x\n", 645 pThis->mouseCapabilities)); 668 646 669 647 /* 670 648 * Notify connector if something has changed 671 649 */ 672 if ( bCapsChanged)673 { 674 Log (("VMMDevReq_SetMouseStatus: capabilities changed (%x), informing connector\n", pThis->mouseCapabilities));650 if (fNotify) 651 { 652 LogRelFlowFunc(("VMMDevReq_SetMouseStatus: notifying connector\n")); 675 653 pThis->pDrv->pfnUpdateMouseCapabilities(pThis->pDrv, pThis->mouseCapabilities); 676 654 } … … 1050 1028 1051 1029 pCtlMaskRequest = (VMMDevCtlGuestFilterMask *)pRequestHeader; 1052 /* The HGCM events are enabled by the VMMDev device automatically when any 1053 * HGCM command is issued. The guest then can not disable these events. 1030 LogRelFlowFunc(("VMMDevCtlGuestFilterMask: or mask: 0x%x, not mask: 0x%x\n", 1031 pCtlMaskRequest->u32OrMask, 1032 pCtlMaskRequest->u32NotMask)); 1033 /* HGCM event notification is enabled by the VMMDev device 1034 * automatically when any HGCM command is issued. The guest 1035 * cannot disable these notifications. 1054 1036 */ 1055 1037 vmmdevCtlGuestFilterMask_EMT (pThis,
Note:
See TracChangeset
for help on using the changeset viewer.