VirtualBox

Changeset 22096 in vbox


Ignore:
Timestamp:
Aug 7, 2009 10:27:55 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
50845
Message:

Devices/VMMDev: simplify and complete mouse status requests

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/VMMDev.h

    r21981 r22096  
    257257/** The guest can read VMMDev events to find out about pointer movement */
    258258#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)
    259268/** @} */
    260269
  • trunk/src/VBox/Devices/VMMDev/VMMDev.cpp

    r21645 r22096  
    600600            {
    601601                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;
    615604                mouseStatus->pointerXPos = pThis->mouseXAbs;
    616605                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));
    619611                pRequestHeader->rc = VINF_SUCCESS;
    620612            }
     
    635627            else
    636628            {
    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));
    668646
    669647                /*
    670648                 * Notify connector if something has changed
    671649                 */
    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"));
    675653                    pThis->pDrv->pfnUpdateMouseCapabilities(pThis->pDrv, pThis->mouseCapabilities);
    676654                }
     
    10501028
    10511029                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.
    10541036                 */
    10551037                vmmdevCtlGuestFilterMask_EMT (pThis,
Note: See TracChangeset for help on using the changeset viewer.

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