VirtualBox

Changeset 100541 in vbox for trunk/src/VBox/Additions/WINNT


Ignore:
Timestamp:
Jul 12, 2023 10:55:48 AM (20 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
158355
Message:

Shared Clipboard: Renamed SharedClipboardWinDataObject::CALLBACKS::pfnTransferStart -> pfnTransferBegin + added pfnTransferEnd, added data object callbacks to propagate transfer end status. bugref:9437

File:
1 edited

Legend:

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

    r100450 r100541  
    170170
    171171#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
    172 
    173172/**
    174  * @copydoc SharedClipboardWinDataObject::CALLBACKS::pfnTransferStart
     173 * @copydoc SharedClipboardWinDataObject::CALLBACKS::pfnTransferBegin
     174 *
     175 * Called by SharedClipboardWinDataObject::GetData() when the user wants to paste data.
     176 * This then requests a new transfer on the host.
    175177 *
    176178 * @thread  Clipboard main thread.
    177179 */
    178 static DECLCALLBACK(int) vbtrShClDataObjectTransferStartCallback(SharedClipboardWinDataObject::PCALLBACKCTX pCbCtx)
     180static DECLCALLBACK(int) vbtrShClDataObjectTransferBeginCallback(SharedClipboardWinDataObject::PCALLBACKCTX pCbCtx)
    179181{
    180182    LogFlowFuncEnter();
     
    185187    int rc = VbglR3ClipboardTransferRequest(&pCtx->CmdCtx);
    186188
     189    LogFlowFuncLeaveRC(rc);
     190    return rc;
     191}
     192
     193/**
     194 * @copydoc SharedClipboardWinDataObject::CALLBACKS::pfnTransferEnd
     195 *
     196 * Called by SharedClipboardWinDataObject when the assigned transfer has been ended.
     197 *
     198 * @thread  Clipboard main thread.
     199 */
     200static DECLCALLBACK(int) vbtrShClDataObjectTransferEndCallback(SharedClipboardWinDataObject::PCALLBACKCTX pCbCtx,
     201                                                               PSHCLTRANSFER pTransfer, int rcTransfer)
     202{
     203    LogFlowFuncEnter();
     204
     205    PSHCLCONTEXT pCtx = (PSHCLCONTEXT)pCbCtx->pvUser;
     206    AssertPtr(pCtx);
     207
     208    SHCLTRANSFERSTATUS enmSts;
     209
     210    switch (rcTransfer)
     211    {
     212        case VERR_CANCELLED:
     213            enmSts = SHCLTRANSFERSTATUS_CANCELED;
     214            break;
     215
     216        default:
     217            enmSts =   RT_SUCCESS(rcTransfer)
     218                     ? SHCLTRANSFERSTATUS_UNINITIALIZED : SHCLTRANSFERSTATUS_ERROR;
     219            break;
     220    }
     221
     222    int rc = VbglR3ClipboardTransferStatusReply(&pCtx->CmdCtx, pTransfer, enmSts,
     223                                                enmSts == SHCLTRANSFERSTATUS_ERROR ? rcTransfer : VINF_SUCCESS);
    187224    LogFlowFuncLeaveRC(rc);
    188225    return rc;
     
    278315
    279316/**
    280  * Cleanup helper function for transfer callbacks.
    281  *
    282  * @param   pTransferCtx        Pointer to transfer context that the transfer contains.
    283  * @param   pTransfer           Pointer to transfer to cleanup.
    284  */
    285 static void vbtrShClTransferCallbackCleanup(PSHCLTRANSFERCTX pTransferCtx, PSHCLTRANSFER pTransfer)
    286 {
    287     LogFlowFuncEnter();
    288 
    289     if (!pTransferCtx || !pTransfer)
    290         return;
    291 
    292     if (pTransfer->pvUser) /* SharedClipboardWinTransferCtx */
    293     {
    294         delete pTransfer->pvUser;
    295         pTransfer->pvUser = NULL;
    296     }
    297 
    298     int rc2 = ShClTransferCtxUnregisterById(pTransferCtx, pTransfer->State.uID);
    299     AssertRC(rc2);
    300 
    301     ShClTransferDestroy(pTransfer);
    302 
    303     RTMemFree(pTransfer);
    304     pTransfer = NULL;
    305 }
    306 
    307 /**
    308317 * Worker for a reading clipboard from the host.
    309318 *
     
    384393    AssertPtr(pCtx);
    385394
    386     LogRel2(("Shared Clipboard: Transfer to destination %s\n",
    387              rcCompletion == VERR_CANCELLED ? "canceled" : "complete"));
    388 
    389     vbtrShClTransferCallbackCleanup(&pCtx->TransferCtx, pCbCtx->pTransfer);
     395    LogRel2(("Shared Clipboard: Transfer %RU16 %s\n",
     396             ShClTransferGetID(pCbCtx->pTransfer), rcCompletion == VERR_CANCELLED ? "canceled" : "complete"));
    390397}
    391398
     
    396403    AssertPtr(pCtx);
    397404
    398     LogRel(("Shared Clipboard: Transfer to destination failed with %Rrc\n", rcError));
    399 
    400     vbtrShClTransferCallbackCleanup(&pCtx->TransferCtx, pCbCtx->pTransfer);
     405    LogRel(("Shared Clipboard: Transfer %RU16 failed with %Rrc\n", ShClTransferGetID(pCbCtx->pTransfer), rcError));
    401406}
    402407
     
    745750                    SharedClipboardWinDataObject::CALLBACKS Callbacks;
    746751                    RT_ZERO(Callbacks);
    747                     Callbacks.pfnTransferStart = vbtrShClDataObjectTransferStartCallback;
     752                    Callbacks.pfnTransferBegin = vbtrShClDataObjectTransferBeginCallback;
     753                    Callbacks.pfnTransferEnd   = vbtrShClDataObjectTransferEndCallback;
    748754
    749755                    rc = SharedClipboardWinTransferCreateAndSetDataObject(pWinCtx, pCtx, &Callbacks);
Note: See TracChangeset for help on using the changeset viewer.

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