VirtualBox

Ignore:
Timestamp:
Sep 25, 2019 6:20:09 AM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
133584
Message:

Shared Clipboard/Transfers: Update.

Location:
trunk/src/VBox/HostServices/SharedClipboard
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-internal.h

    r80866 r80990  
    223223
    224224#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
    225 int sharedClipboardSvcTransferOpen(PSHCLPROVIDERCTX pCtx);
    226 DECLCALLBACK(int) sharedClipboardSvcTransferClose(PSHCLPROVIDERCTX pCtx);
    227 
    228 int sharedClipboardSvcTransferGetRoots(PSHCLPROVIDERCTX pCtx, PSHCLROOTLIST *ppRootList);
    229 
    230 int sharedClipboardSvcTransferListOpen(PSHCLPROVIDERCTX pCtx, PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList);
    231 int sharedClipboardSvcTransferListClose(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList);
    232 int sharedClipboardSvcTransferListHdrRead(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr);
    233 int sharedClipboardSvcTransferListHdrWrite(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr);
    234 int sharedClipboardSvcTransferListEntryRead(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry);
    235 int sharedClipboardSvcTransferListEntryWrite(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry);
    236 
    237 int sharedClipboardSvcTransferObjOpen(PSHCLPROVIDERCTX pCtx, PSHCLOBJOPENCREATEPARMS pCreateParms,
    238                                  PSHCLOBJHANDLE phObj);
    239 int sharedClipboardSvcTransferObjClose(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj);
    240 int sharedClipboardSvcTransferObjRead(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
    241                                  void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbRead);
    242 int sharedClipboardSvcTransferObjWrite(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
    243                                   void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbWritten);
     225int sharedClipboardSvcTransferIfaceOpen(PSHCLPROVIDERCTX pCtx);
     226int sharedClipboardSvcTransferIfaceClose(PSHCLPROVIDERCTX pCtx);
     227
     228int sharedClipboardSvcTransferIfaceGetRoots(PSHCLPROVIDERCTX pCtx, PSHCLROOTLIST *ppRootList);
     229
     230int sharedClipboardSvcTransferIfaceListOpen(PSHCLPROVIDERCTX pCtx, PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList);
     231int sharedClipboardSvcTransferIfaceListClose(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList);
     232int sharedClipboardSvcTransferIfaceListHdrRead(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr);
     233int sharedClipboardSvcTransferIfaceListHdrWrite(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr);
     234int sharedClipboardSvcTransferIfaceListEntryRead(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry);
     235int sharedClipboardSvcTransferIfaceListEntryWrite(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry);
     236
     237int sharedClipboardSvcTransferIfaceObjOpen(PSHCLPROVIDERCTX pCtx, PSHCLOBJOPENCREATEPARMS pCreateParms,
     238                                           PSHCLOBJHANDLE phObj);
     239int sharedClipboardSvcTransferIfaceObjClose(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj);
     240int sharedClipboardSvcTransferIfaceObjRead(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
     241                                           void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbRead);
     242int sharedClipboardSvcTransferIfaceObjWrite(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
     243                                            void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbWritten);
    244244
    245245DECLCALLBACK(void) VBoxSvcClipboardTransferPrepareCallback(PSHCLTRANSFERCALLBACKDATA pData);
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-transfers.cpp

    r80918 r80990  
    5858*********************************************************************************************************************************/
    5959
    60 DECLCALLBACK(int) sharedClipboardSvcTransferOpen(PSHCLPROVIDERCTX pCtx)
     60DECLCALLBACK(int) sharedClipboardSvcTransferIfaceOpen(PSHCLPROVIDERCTX pCtx)
    6161{
    6262    RT_NOREF(pCtx);
     
    6666}
    6767
    68 DECLCALLBACK(int) sharedClipboardSvcTransferClose(PSHCLPROVIDERCTX pCtx)
     68DECLCALLBACK(int) sharedClipboardSvcTransferIfaceClose(PSHCLPROVIDERCTX pCtx)
    6969{
    7070    RT_NOREF(pCtx);
     
    7474}
    7575
    76 DECLCALLBACK(int) sharedClipboardSvcTransferGetRoots(PSHCLPROVIDERCTX pCtx, PSHCLROOTLIST *ppRootList)
     76DECLCALLBACK(int) sharedClipboardSvcTransferIfaceGetRoots(PSHCLPROVIDERCTX pCtx, PSHCLROOTLIST *ppRootList)
    7777{
    7878    LogFlowFuncEnter();
     
    192192}
    193193
    194 DECLCALLBACK(int) sharedClipboardSvcTransferListOpen(PSHCLPROVIDERCTX pCtx,
    195                                                      PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList)
     194DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListOpen(PSHCLPROVIDERCTX pCtx,
     195                                                          PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList)
    196196{
    197197    LogFlowFuncEnter();
     
    251251}
    252252
    253 DECLCALLBACK(int) sharedClipboardSvcTransferListClose(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList)
     253DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListClose(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList)
    254254{
    255255    LogFlowFuncEnter();
     
    298298}
    299299
    300 DECLCALLBACK(int) sharedClipboardSvcTransferListHdrRead(PSHCLPROVIDERCTX pCtx,
    301                                                         SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr)
     300DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListHdrRead(PSHCLPROVIDERCTX pCtx,
     301                                                             SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr)
    302302{
    303303    LogFlowFuncEnter();
     
    315315
    316316        HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID,
    317                                                                               pCtx->pTransfer->State.uID, uEvent));
     317                                                                  pCtx->pTransfer->State.uID, uEvent));
    318318        HGCMSvcSetU64(&pMsg->paParms[1], hList);
    319319        HGCMSvcSetU32(&pMsg->paParms[2], 0 /* fFlags */);
     
    349349}
    350350
    351 DECLCALLBACK(int) sharedClipboardSvcTransferListHdrWrite(PSHCLPROVIDERCTX pCtx,
    352                                                          SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr)
     351DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListHdrWrite(PSHCLPROVIDERCTX pCtx,
     352                                                              SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr)
    353353{
    354354    RT_NOREF(pCtx, hList, pListHdr);
     
    359359}
    360360
    361 DECLCALLBACK(int) sharedClipboardSvcTransferListEntryRead(PSHCLPROVIDERCTX pCtx,
    362                                                           SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry)
     361DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListEntryRead(PSHCLPROVIDERCTX pCtx,
     362                                                               SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry)
    363363{
    364364    LogFlowFuncEnter();
     
    409409}
    410410
    411 DECLCALLBACK(int) sharedClipboardSvcTransferListEntryWrite(PSHCLPROVIDERCTX pCtx,
    412                                                            SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry)
     411DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListEntryWrite(PSHCLPROVIDERCTX pCtx,
     412                                                                SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry)
    413413{
    414414    RT_NOREF(pCtx, hList, pListEntry);
     
    419419}
    420420
    421 int sharedClipboardSvcTransferObjOpen(PSHCLPROVIDERCTX pCtx, PSHCLOBJOPENCREATEPARMS pCreateParms,
    422                                       PSHCLOBJHANDLE phObj)
     421int sharedClipboardSvcTransferIfaceObjOpen(PSHCLPROVIDERCTX pCtx, PSHCLOBJOPENCREATEPARMS pCreateParms,
     422                                           PSHCLOBJHANDLE phObj)
    423423{
    424424    LogFlowFuncEnter();
     
    440440
    441441        HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID,
    442                                                                               pCtx->pTransfer->State.uID, uEvent));
     442                                                                  pCtx->pTransfer->State.uID, uEvent));
    443443        HGCMSvcSetU64(&pMsg->paParms[1], 0); /* uHandle */
    444444        HGCMSvcSetU32(&pMsg->paParms[2], cbPath);
     
    480480}
    481481
    482 int sharedClipboardSvcTransferObjClose(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj)
     482int sharedClipboardSvcTransferIfaceObjClose(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj)
    483483{
    484484    LogFlowFuncEnter();
     
    496496
    497497        HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID,
    498                                                                               pCtx->pTransfer->State.uID, uEvent));
     498                                                                  pCtx->pTransfer->State.uID, uEvent));
    499499        HGCMSvcSetU64(&pMsg->paParms[1], hObj);
    500500
     
    533533}
    534534
    535 int sharedClipboardSvcTransferObjRead(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
    536                                       void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbRead)
     535int sharedClipboardSvcTransferIfaceObjRead(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
     536                                           void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbRead)
    537537{
    538538    LogFlowFuncEnter();
     
    550550
    551551        HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID,
    552                                                                               pCtx->pTransfer->State.uID, uEvent));
     552                                                                  pCtx->pTransfer->State.uID, uEvent));
    553553        HGCMSvcSetU64(&pMsg->paParms[1], hObj);
    554554        HGCMSvcSetU32(&pMsg->paParms[2], cbData);
     
    592592}
    593593
    594 int sharedClipboardSvcTransferObjWrite(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
    595                                        void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbWritten)
     594int sharedClipboardSvcTransferIfaceObjWrite(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,
     595                                            void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbWritten)
    596596{
    597597    LogFlowFuncEnter();
     
    609609
    610610        HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID,
    611                                                                               pCtx->pTransfer->State.uID, uEvent));
     611                                                                  pCtx->pTransfer->State.uID, uEvent));
    612612        HGCMSvcSetU64(&pMsg->paParms[1], hObj);
    613613        HGCMSvcSetU64(&pMsg->paParms[2], cbData);
     
    21302130                if (RT_SUCCESS(rc))
    21312131                {
    2132                     creationCtx.Interface.pfnTransferOpen    = sharedClipboardSvcTransferOpen;
    2133                     creationCtx.Interface.pfnTransferClose   = sharedClipboardSvcTransferClose;
    2134                     creationCtx.Interface.pfnListOpen        = sharedClipboardSvcTransferListOpen;
    2135                     creationCtx.Interface.pfnListClose       = sharedClipboardSvcTransferListClose;
    2136                     creationCtx.Interface.pfnObjOpen         = sharedClipboardSvcTransferObjOpen;
    2137                     creationCtx.Interface.pfnObjClose        = sharedClipboardSvcTransferObjClose;
    2138 
    2139                     creationCtx.Interface.pfnRootsGet        = sharedClipboardSvcTransferGetRoots;
    2140                     creationCtx.Interface.pfnListHdrRead     = sharedClipboardSvcTransferListHdrRead;
    2141                     creationCtx.Interface.pfnListEntryRead   = sharedClipboardSvcTransferListEntryRead;
    2142                     creationCtx.Interface.pfnObjRead         = sharedClipboardSvcTransferObjRead;
     2132                    creationCtx.Interface.pfnTransferOpen  = sharedClipboardSvcTransferIfaceOpen;
     2133                    creationCtx.Interface.pfnTransferClose = sharedClipboardSvcTransferIfaceClose;
     2134
     2135                    creationCtx.Interface.pfnRootsGet      = sharedClipboardSvcTransferIfaceGetRoots;
     2136
     2137                    creationCtx.Interface.pfnListOpen      = sharedClipboardSvcTransferIfaceListOpen;
     2138                    creationCtx.Interface.pfnListClose     = sharedClipboardSvcTransferIfaceListClose;
     2139                    creationCtx.Interface.pfnListHdrRead   = sharedClipboardSvcTransferIfaceListHdrRead;
     2140                    creationCtx.Interface.pfnListEntryRead = sharedClipboardSvcTransferIfaceListEntryRead;
     2141
     2142                    creationCtx.Interface.pfnObjOpen       = sharedClipboardSvcTransferIfaceObjOpen;
     2143                    creationCtx.Interface.pfnObjClose      = sharedClipboardSvcTransferIfaceObjClose;
     2144                    creationCtx.Interface.pfnObjRead       = sharedClipboardSvcTransferIfaceObjRead;
    21432145                }
    21442146            }
    21452147            else if (enmDir == SHCLTRANSFERDIR_WRITE)
    21462148            {
    2147                 creationCtx.Interface.pfnListHdrWrite   = sharedClipboardSvcTransferListHdrWrite;
    2148                 creationCtx.Interface.pfnListEntryWrite = sharedClipboardSvcTransferListEntryWrite;
    2149                 creationCtx.Interface.pfnObjWrite       = sharedClipboardSvcTransferObjWrite;
     2149                creationCtx.Interface.pfnListHdrWrite   = sharedClipboardSvcTransferIfaceListHdrWrite;
     2150                creationCtx.Interface.pfnListEntryWrite = sharedClipboardSvcTransferIfaceListEntryWrite;
     2151                creationCtx.Interface.pfnObjWrite       = sharedClipboardSvcTransferIfaceObjWrite;
    21502152            }
    21512153            else
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-win.cpp

    r80866 r80990  
    213213        case WM_CLIPBOARDUPDATE:
    214214        {
    215             LogFunc(("WM_CLIPBOARDUPDATE: Waiting ...\n"));
     215            LogFunc(("WM_CLIPBOARDUPDATE\n"));
    216216
    217217            int rc = RTCritSectEnter(&pWinCtx->CritSect);
     
    257257            LogFunc(("WM_DRAWCLIPBOARD\n"));
    258258
    259             if (GetClipboardOwner() != hWnd)
    260             {
    261                 /* Clipboard was updated by another application, retrieve formats and report back. */
    262                 int rc = vboxClipboardSvcWinSyncInternal(pCtx);
    263                 if (RT_SUCCESS(rc))
    264                     sharedClipboardSvcSetSource(pCtx->pClient, SHCLSOURCE_LOCAL);
     259            int rc = RTCritSectEnter(&pWinCtx->CritSect);
     260            if (RT_SUCCESS(rc))
     261            {
     262                const HWND hWndClipboardOwner = GetClipboardOwner();
     263
     264                LogFunc(("WM_DRAWCLIPBOARD: hWndClipboardOwnerUs=%p, hWndNewClipboardOwner=%p\n",
     265                         pWinCtx->hWndClipboardOwnerUs, hWndClipboardOwner));
     266
     267                if (pWinCtx->hWndClipboardOwnerUs != hWndClipboardOwner)
     268                {
     269                    int rc2 = RTCritSectLeave(&pWinCtx->CritSect);
     270                    AssertRC(rc2);
     271
     272                    /* Clipboard was updated by another application, retrieve formats and report back. */
     273                    rc = vboxClipboardSvcWinSyncInternal(pCtx);
     274                    if (RT_SUCCESS(rc))
     275                        sharedClipboardSvcSetSource(pCtx->pClient, SHCLSOURCE_LOCAL);
     276                }
     277                else
     278                {
     279                    int rc2 = RTCritSectLeave(&pWinCtx->CritSect);
     280                    AssertRC(rc2);
     281                }
    265282            }
    266283
     
    389406    }
    390407
    391     LogFlowFunc(("hWnd=%p, WM_ %u\n", hWnd, uMsg));
     408    LogFlowFunc(("LEAVE hWnd=%p, WM_ %u\n", hWnd, uMsg));
    392409    return DefWindowProc(hWnd, uMsg, wParam, lParam);
    393410}
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-x11.cpp

    r80858 r80990  
    5959/**
    6060 * Report formats available in the X11 clipboard to VBox.
    61  * @param  pCtx        Opaque context pointer for the glue code
    62  * @param  u32Formats  The formats available
    63  * @note  Host glue code
     61 * @param  pCtx                 Opaque context pointer for the glue code.
     62 * @param  u32Formats           The formats available.
    6463 */
    6564void ClipReportX11Formats(SHCLCONTEXT *pCtx, uint32_t u32Formats)
    6665{
    6766    LogFlowFunc(("pCtx=%p, u32Formats=%02X\n", pCtx, u32Formats));
     67
     68    if (u32Formats == VBOX_SHCL_FMT_NONE) /* No formats to report? Bail out early. */
     69        return;
    6870
    6971    SHCLFORMATDATA formatData;
  • trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc.cpp

    r80918 r80990  
    937937    if (pMsg)
    938938    {
    939         SHCLEVENTID uEvent = SharedClipboardEventIDGenerate(&pClient->Events);
     939        const SHCLEVENTID uEvent = SharedClipboardEventIDGenerate(&pClient->Events);
    940940
    941941        HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID,
     
    948948        {
    949949#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
     950            /* If this is an URI list, create a transfer locally and also tell the guest to create
     951             * a transfer on the guest side. */
    950952            if (pFormats->uFormats & VBOX_SHCL_FMT_URI_LIST)
    951953            {
     
    955957                    LogRel(("Shared Clipboard: Initializing host write transfer failed with %Rrc\n", rc));
    956958            }
     959            else
     960            {
    957961#endif
    958             if (RT_SUCCESS(rc))
    959962                rc = sharedClipboardSvcClientWakeup(pClient);
     963
     964#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
     965            }
     966#endif
    960967        }
    961968    }
     
    13221329                    rc = VERR_ACCESS_DENIED;
    13231330                }
    1324                 else
     1331                else if (uFormats != VBOX_SHCL_FMT_NONE) /* Only announce formats if we actually *have* formats to announce! */
    13251332                {
    13261333                    rc = sharedClipboardSvcSetSource(pClient, SHCLSOURCE_REMOTE);
     
    13341341                            parms.uFormat = uFormats;
    13351342
    1336                             g_ExtState.pfnExtension(g_ExtState.pvExtension, VBOX_CLIPBOARD_EXT_FN_FORMAT_ANNOUNCE, &parms, sizeof(parms));
     1343                            g_ExtState.pfnExtension(g_ExtState.pvExtension, VBOX_CLIPBOARD_EXT_FN_FORMAT_ANNOUNCE,
     1344                                                    &parms, sizeof(parms));
    13371345                        }
    13381346
     
    13441352
    13451353                        formatData.uFormats = uFormats;
     1354                        Assert(formatData.uFormats != VBOX_SHCL_FMT_NONE); /* Sanity. */
    13461355
    13471356                        rc = SharedClipboardSvcImplFormatAnnounce(pClient, &cmdCtx, &formatData);
     
    14131422
    14141423                                formatData.uFormats = g_ExtState.uDelayedFormats;
     1424                                Assert(formatData.uFormats != VBOX_SHCL_FMT_NONE); /* There better is *any* format here now. */
    14151425
    14161426                                int rc2 = sharedClipboardSvcFormatsReport(pClient, &formatData);
     
    15441554
    15451555    LogFlowFunc(("u32Function=%RU32 (%s), cParms=%RU32, paParms=%p\n",
    1546                  u32Function, VBoxShClHostMsgToStr(u32Function), cParms, paParms));
     1556                 u32Function, VBoxShClHostFunctionToStr(u32Function), cParms, paParms));
    15471557
    15481558    switch (u32Function)
     
    18261836                    g_ExtState.uDelayedFormats = u32Format;
    18271837                }
    1828                 else
     1838                else if (u32Format != VBOX_SHCL_FMT_NONE)
    18291839                {
    18301840                    SHCLFORMATDATA formatData;
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