VirtualBox

Changeset 83142 in vbox for trunk/src/VBox/Additions


Ignore:
Timestamp:
Feb 24, 2020 7:24:26 PM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
136260
Message:

bugref:9637. Sending monitor positions (offsets) from GAs to svga device since vmwgfx fails to do so.

Location:
trunk/src/VBox/Additions
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxGuest/VBoxGuest.cpp

    r82968 r83142  
    23882388        case VMMDevReq_VideoAccelFlush:
    23892389        case VMMDevReq_VideoSetVisibleRegion:
     2390        case VMMDevReq_VideoUpdateMonitorPositions:
    23902391        case VMMDevReq_GetDisplayChangeRequestEx:
    23912392        case VMMDevReq_GetDisplayChangeRequestMulti:
     
    45044505    return fOurIrq;
    45054506}
    4506 
  • trunk/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibGenericRequest.cpp

    r82968 r83142  
    9696        || pReq->requestType == VMMDevReq_LogString
    9797        || pReq->requestType == VMMDevReq_SetPointerShape
    98         || pReq->requestType == VMMDevReq_VideoSetVisibleRegion)
     98        || pReq->requestType == VMMDevReq_VideoSetVisibleRegion
     99        || pReq->requestType == VMMDevReq_VideoUpdateMonitorPositions)
    99100    {
    100101        if (RT_UNLIKELY(cbReq > VMMDEV_MAX_VMMDEVREQ_SIZE))
     
    181182        VbglR0PhysHeapFree(pReq);
    182183}
    183 
  • trunk/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibSeamless.cpp

    r82968 r83142  
    171171}
    172172
     173VBGLR3DECL(int) VbglR3SeamlessSendMonitorPositions(uint32_t cPositions, PRTPOINT pPositions)
     174{
     175    VMMDevVideoUpdateMonitorPositions *pReq;
     176    int rc;
     177
     178    AssertReturn(cPositions || cPositions == 0, VERR_INVALID_PARAMETER);
     179    //AssertMsgReturn(cRects <= _1M, ("%u\n", cRects), VERR_OUT_OF_RANGE);
     180
     181    rc = vbglR3GRAlloc((VMMDevRequestHeader **)&pReq,
     182                         sizeof(VMMDevVideoUpdateMonitorPositions)
     183                       + cPositions * sizeof(RTPOINT)
     184                       - sizeof(RTPOINT),
     185                       VMMDevReq_VideoUpdateMonitorPositions);
     186    if (RT_SUCCESS(rc))
     187    {
     188        pReq->cPositions = cPositions;
     189        if (cPositions)
     190            memcpy(&pReq->aPositions, pPositions, cPositions * sizeof(RTPOINT));
     191        rc = vbglR3GRPerform(&pReq->header);
     192        LogFunc(("Monitor position update request returned %Rrc, internal %Rrc.\n",
     193                 rc, pReq->header.rc));
     194        if (RT_SUCCESS(rc))
     195            rc = pReq->header.rc;
     196        vbglR3GRFree(&pReq->header);
     197    }
     198    LogFunc(("Sending monitor positions (%u of them)  to the host: %Rrc\n", cPositions, rc));
     199    return rc;
     200}
  • trunk/src/VBox/Additions/x11/VBoxClient/display-svga-x11.cpp

    r83140 r83142  
    142142}
    143143
     144static void sendMonitorPositions(RTPOINT *pPositions, size_t cPositions)
     145{
     146    if (cPositions && !pPositions)
     147    {
     148        VBClLogError(("Monitor position update called with NULL pointer!\n"));
     149        return;
     150    }
     151    VbglR3SeamlessSendMonitorPositions(cPositions, pPositions);
     152}
     153
    144154static void queryMonitorPositions()
    145155{
     
    181191            mpMonitorPositions[iMonitorID].y = pMonitorInfo[i].y;
    182192        }
    183         // if (iMonitorCount > 0)
    184         //     mHostMonitorPositionSendCallback(mpMonitorPositions, x11Context.hOutputCount);
     193        if (iMonitorCount > 0)
     194            mHostMonitorPositionSendCallback(mpMonitorPositions, x11Context.hOutputCount);
    185195    }
    186196    XRRFreeMonitors(pMonitorInfo);
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