VirtualBox

Ignore:
Timestamp:
May 26, 2018 12:37:50 PM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
122809
Message:

Main, VMMDev: implemented IDisplay::SetScreenLayout, VMMDev multimonitor resize request and VBoxManage controlvm setscreenlayout. bugref:8393

Location:
trunk/src/VBox/Additions/common/VBoxGuest
Files:
3 edited

Legend:

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

    r70873 r72352  
    23812381        case VMMDevReq_VideoSetVisibleRegion:
    23822382        case VMMDevReq_GetDisplayChangeRequestEx:
     2383        case VMMDevReq_GetDisplayChangeRequestMulti:
    23832384        case VMMDevReq_GetSeamlessChangeRequest:
    23842385        case VMMDevReq_GetVRDPChangeRequest:
  • trunk/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR0LibGenericRequest.cpp

    r70873 r72352  
    8282     */
    8383    if (   pReq->requestType == VMMDevReq_ChangeMemBalloon
     84        || pReq->requestType == VMMDevReq_GetDisplayChangeRequestMulti
    8485#ifdef VBOX_WITH_64_BITS_GUESTS
    8586        || pReq->requestType == VMMDevReq_HGCMCall32
  • trunk/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibVideo.cpp

    r70061 r72352  
    273273        return getDisplayChangeRequest2(pcx, pcy, pcBits, piDisplay, fAck);
    274274    }
     275    return rc;
     276}
     277
     278
     279/**
     280 * Query the last display change request sent from the host to the guest.
     281 *
     282 * @returns iprt status value
     283 * @param   cDisplaysIn   How many elements in the paDisplays array.
     284 * @param   pcDisplaysOut How many elements were returned.
     285 * @param   paDisplays    Display information.
     286 * @param   fAck          Whether or not to acknowledge the newest request sent by
     287 *                        the host.  If this is set, the function will return the
     288 *                        most recent host request, otherwise it will return the
     289 *                        last request to be acknowledged.
     290 */
     291VBGLR3DECL(int) VbglR3GetDisplayChangeRequestMulti(uint32_t cDisplaysIn,
     292                                                   uint32_t *pcDisplaysOut,
     293                                                   VMMDevDisplayDef *paDisplays,
     294                                                   bool fAck)
     295{
     296    VMMDevDisplayChangeRequestMulti *pReq;
     297    size_t cbDisplays;
     298    size_t cbAlloc;
     299    int rc = VINF_SUCCESS;
     300
     301    AssertReturn(cDisplaysIn > 0 && cDisplaysIn <= 64 /* VBOX_VIDEO_MAX_SCREENS */, VERR_INVALID_PARAMETER);
     302    AssertPtrReturn(pcDisplaysOut, VERR_INVALID_PARAMETER);
     303    AssertPtrReturn(paDisplays, VERR_INVALID_PARAMETER);
     304
     305    cbDisplays = cDisplaysIn * sizeof(VMMDevDisplayDef);
     306    cbAlloc = RT_UOFFSETOF(VMMDevDisplayChangeRequestMulti, aDisplays) + cbDisplays;
     307    pReq = (VMMDevDisplayChangeRequestMulti *)RTMemAllocZ(cbAlloc);
     308    AssertPtrReturn(pReq, VERR_NO_MEMORY);
     309
     310    rc = vmmdevInitRequest(&pReq->header, VMMDevReq_GetDisplayChangeRequestMulti);
     311    AssertRCReturnStmt(rc, RTMemFree(pReq), rc);
     312
     313    pReq->header.size += (uint32_t)cbDisplays;
     314    pReq->cDisplays = cDisplaysIn;
     315    if (fAck)
     316        pReq->eventAck = VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST;
     317
     318    rc = vbglR3GRPerform(&pReq->header);
     319    AssertRCReturnStmt(rc, RTMemFree(pReq), rc);
     320
     321    rc = pReq->header.rc;
     322    if (RT_SUCCESS(rc))
     323    {
     324        memcpy(paDisplays, pReq->aDisplays, pReq->cDisplays * sizeof(VMMDevDisplayDef));
     325        *pcDisplaysOut = pReq->cDisplays;
     326    }
     327
     328    RTMemFree(pReq);
    275329    return rc;
    276330}
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