VirtualBox

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


Ignore:
Timestamp:
Feb 4, 2021 4:31:28 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
142646
Message:

Shared Clipboard/Transfers: More callback code. ​bugref:9437

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxClipboard.cpp

    r87452 r87611  
    9797 * Cleanup helper function for transfer callbacks.
    9898 *
    99  * @param   pData               Callback data to cleanup.
     99 * @param   pTransferCtx        Pointer to transfer context that the transfer contains.
     100 * @param   pTransfer           Pointer to transfer to cleanup.
    100101 */
    101 static void vboxClipboardTransferCallbackCleanup(PSHCLTXPROVIDERCTX pCtx)
     102static void vboxClipboardTransferCallbackCleanup(PSHCLTRANSFERCTX pTransferCtx, PSHCLTRANSFER pTransfer)
    102103{
    103104    LogFlowFuncEnter();
    104105
    105     PSHCLTRANSFERCTX pCtx = (PSHCLTRANSFERCTX)pData->pvUser;
    106     AssertPtr(pCtx);
    107 
    108     PSHCLTRANSFER pTransfer = pData->pTransfer;
    109     AssertPtr(pTransfer);
     106    if (!pTransferCtx || !pTransfer)
     107        return;
    110108
    111109    if (pTransfer->pvUser) /* SharedClipboardWinTransferCtx */
     
    115113    }
    116114
    117     int rc2 = ShClTransferCtxTransferUnregister(pCtx, pTransfer->State.uID);
     115    int rc2 = ShClTransferCtxTransferUnregister(pTransferCtx, pTransfer->State.uID);
    118116    AssertRC(rc2);
    119117
     
    124122}
    125123
    126 static DECLCALLBACK(int)  vboxClipboardOnTransferInitCallback(PSHCLTXPROVIDERCTX pCtx)
    127 {
    128     PSHCLCONTEXT pCtx = (PSHCLCONTEXT)pData->pvUser;
     124/** @copydoc SHCLTRANSFERCALLBACKTABLE::pfnOnInitialize */
     125static DECLCALLBACK(int) vboxClipboardOnTransferInitCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx)
     126{
     127    PSHCLCONTEXT pCtx = (PSHCLCONTEXT)pCbCtx->pvUser;
    129128    AssertPtr(pCtx);
    130129
    131130    LogFlowFunc(("pCtx=%p\n", pCtx));
    132131
    133     RT_NOREF(pData, pCtx);
     132    RT_NOREF(pCtx);
    134133
    135134    return VINF_SUCCESS;
    136135}
    137136
    138 static DECLCALLBACK(int) vboxClipboardOnTransferStartCallback(PSHCLTXPROVIDERCTX pCtx)
    139 {
    140     PSHCLCONTEXT pCtx = (PSHCLCONTEXT)pData->pvUser;
     137/** @copydoc SHCLTRANSFERCALLBACKTABLE::pfnOnStart */
     138static DECLCALLBACK(int) vboxClipboardOnTransferStartCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx)
     139{
     140    PSHCLCONTEXT pCtx = (PSHCLCONTEXT)pCbCtx->pvUser;
    141141    AssertPtr(pCtx);
    142     Assert(pData->cbUser == sizeof(SHCLCONTEXT));
    143 
    144     PSHCLTRANSFER pTransfer = pData->pTransfer;
     142
     143    PSHCLTRANSFER pTransfer = pCbCtx->pTransfer;
    145144    AssertPtr(pTransfer);
    146145
     
    192191}
    193192
    194 static DECLCALLBACK(void) vboxClipboardOnTransferCompleteCallback(PSHCLTXPROVIDERCTX pCtx, int rc)
    195 {
    196     PSHCLCONTEXT pCtx = (PSHCLCONTEXT)pData->pvUser;
     193/** @copydoc SHCLTRANSFERCALLBACKTABLE::pfnOnCompleted */
     194static DECLCALLBACK(void) vboxClipboardOnTransferCompletedCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx, int rcCompletion)
     195{
     196    PSHCLCONTEXT pCtx = (PSHCLCONTEXT)pCbCtx->pvUser;
    197197    AssertPtr(pCtx);
    198198
    199     RT_NOREF(pCtx, rc);
    200 
    201     LogFlowFunc(("pCtx=%p, rc=%Rrc\n", pCtx, rc));
    202 
    203     LogRel2(("Shared Clipboard: Transfer to destination complete\n"));
    204 
    205     vboxClipboardTransferCallbackCleanup(pData);
    206 }
    207 
    208 static DECLCALLBACK(void) vboxClipboardOnTransferErrorCallback(PSHCLTXPROVIDERCTX pCtx, int rc)
    209 {
    210     PSHCLCONTEXT pCtx = (PSHCLCONTEXT)pData->pvUser;
     199    LogRel2(("Shared Clipboard: Transfer to destination %s\n",
     200             rcCompletion == VERR_CANCELLED ? "canceled" : "complete"));
     201
     202    vboxClipboardTransferCallbackCleanup(&pCtx->TransferCtx, pCbCtx->pTransfer);
     203}
     204
     205/** @copydoc SHCLTRANSFERCALLBACKTABLE::pfnOnError */
     206static DECLCALLBACK(void) vboxClipboardOnTransferErrorCallback(PSHCLTRANSFERCALLBACKCTX pCbCtx, int rcError)
     207{
     208    PSHCLCONTEXT pCtx = (PSHCLCONTEXT)pCbCtx->pvUser;
    211209    AssertPtr(pCtx);
    212210
    213     RT_NOREF(pCtx, rc);
    214 
    215     LogFlowFunc(("pCtx=%p, rc=%Rrc\n", pCtx, rc));
    216 
    217     LogRel(("Shared Clipboard: Transfer to destination failed with %Rrc\n", rc));
    218 
    219     vboxClipboardTransferCallbackCleanup(pData);
     211    LogRel(("Shared Clipboard: Transfer to destination failed with %Rrc\n", rcError));
     212
     213    vboxClipboardTransferCallbackCleanup(&pCtx->TransferCtx, pCbCtx->pTransfer);
    220214}
    221215
     
    883877
    884878#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
    885     /* Install callbacks. */
     879    /*
     880     * Set callbacks.
     881     * Those will be registered within VbglR3 when a new transfer gets initialized.
     882     */
    886883    RT_ZERO(pCtx->CmdCtx.Transfers.Callbacks);
    887884
     
    889886    pCtx->CmdCtx.Transfers.Callbacks.cbUser = sizeof(SHCLCONTEXT);
    890887
    891     pCtx->CmdCtx.Transfers.Callbacks.pfnTransferInitialize = vboxClipboardOnTransferInitCallback;
    892     pCtx->CmdCtx.Transfers.Callbacks.pfnTransferStart      = vboxClipboardOnTransferStartCallback;
    893     pCtx->CmdCtx.Transfers.Callbacks.pfnTransferComplete   = vboxClipboardOnTransferCompleteCallback;
    894     pCtx->CmdCtx.Transfers.Callbacks.pfnTransferError      = vboxClipboardOnTransferErrorCallback;
     888    pCtx->CmdCtx.Transfers.Callbacks.pfnOnInitialize = vboxClipboardOnTransferInitCallback;
     889    pCtx->CmdCtx.Transfers.Callbacks.pfnOnStart      = vboxClipboardOnTransferStartCallback;
     890    pCtx->CmdCtx.Transfers.Callbacks.pfnOnCompleted  = vboxClipboardOnTransferCompletedCallback;
     891    pCtx->CmdCtx.Transfers.Callbacks.pfnOnError      = vboxClipboardOnTransferErrorCallback;
    895892#endif
    896893
  • trunk/src/VBox/Additions/common/VBoxGuest/lib/VBoxGuestR3LibClipboard.cpp

    r87452 r87611  
    18031803    if (RT_SUCCESS(rc))
    18041804    {
     1805        ShClTransferSetCallbacks(pTransfer, &pCmdCtx->Transfers.Callbacks);
     1806
    18051807        rc = ShClTransferInit(pTransfer, enmDir, enmSource);
    18061808        if (RT_SUCCESS(rc))
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