VirtualBox

Ignore:
Timestamp:
Jul 5, 2023 4:18:02 PM (21 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
158133
Message:

Shared Clipboard: Made setting the transfer callbacks part of ShClTransferCreate(), otherwise the pfnOnCreated callback won't be called. ​​bugref:9437

Location:
trunk/src/VBox/GuestHost/SharedClipboard
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/SharedClipboard/clipboard-transfers.cpp

    r100385 r100393  
    4444
    4545
     46
     47/*********************************************************************************************************************************
     48 * Prototypes                                                                                                                    *
     49 ********************************************************************************************************************************/
     50
     51static void shClTransferCopyCallbacks(PSHCLTRANSFERCALLBACKS pCallbacksDst, PSHCLTRANSFERCALLBACKS pCallbacksSrc);
    4652DECLINLINE(void) shClTransferLock(PSHCLTRANSFER pTransfer);
    4753DECLINLINE(void) shClTransferUnlock(PSHCLTRANSFER pTransfer);
     54static void shClTransferSetCallbacks(PSHCLTRANSFER pTransfer, PSHCLTRANSFERCALLBACKS pCallbacks);
    4855static int shClTransferSetStatus(PSHCLTRANSFER pTransfer, SHCLTRANSFERSTATUS enmStatus);
    4956static int shClTransferThreadCreate(PSHCLTRANSFER pTransfer, PFNRTTHREAD pfnThreadFunc, void *pvUser);
     
    10521059 * @param   enmDir              Specifies the transfer direction of this transfer.
    10531060 * @param   enmSource           Specifies the data source of the transfer.
     1061 * @param   pCallbacks          Callback table to use. Optional and can be NULL.
    10541062 * @param   cbMaxChunkSize      Maximum transfer chunk size (in bytes) to use.
    10551063 * @param   cMaxListHandles     Maximum list entries the transfer can have.
     
    10581066 *                              Must be destroyed by ShClTransferDestroy().
    10591067 */
    1060 int ShClTransferCreateEx(SHCLTRANSFERDIR enmDir, SHCLSOURCE enmSource,
     1068int ShClTransferCreateEx(SHCLTRANSFERDIR enmDir, SHCLSOURCE enmSource, PSHCLTRANSFERCALLBACKS pCallbacks,
    10611069                         uint32_t cbMaxChunkSize, uint32_t cMaxListHandles, uint32_t cMaxObjHandles, PSHCLTRANSFER *ppTransfer)
    10621070{
    1063 
    1064 
    10651071    AssertPtrReturn(ppTransfer, VERR_INVALID_POINTER);
     1072    /* pCallbacks can be NULL. */
    10661073
    10671074    LogFlowFuncEnter();
     
    10961103    RT_ZERO(pTransfer->ProviderCtx);
    10971104    RT_ZERO(pTransfer->ProviderIface);
     1105
     1106    /* Make sure to set the callbacks before calling pfnOnCreate below. */
     1107    shClTransferSetCallbacks(pTransfer, pCallbacks);
    10981108
    10991109    ShClTransferListInit(&pTransfer->lstRoots);
     
    11321142 * @param   enmDir              Specifies the transfer direction of this transfer.
    11331143 * @param   enmSource           Specifies the data source of the transfer.
     1144 * @param   pCallbacks          Callback table to use. Optional and can be NULL.
    11341145 * @param   ppTransfer          Where to return the created clipboard transfer struct.
    11351146 *                              Must be destroyed by ShClTransferDestroy().
    11361147 */
    1137 int ShClTransferCreate(SHCLTRANSFERDIR enmDir, SHCLSOURCE enmSource, PSHCLTRANSFER *ppTransfer)
    1138 {
    1139     return ShClTransferCreateEx(enmDir, enmSource,
     1148int ShClTransferCreate(SHCLTRANSFERDIR enmDir, SHCLSOURCE enmSource, PSHCLTRANSFERCALLBACKS pCallbacks, PSHCLTRANSFER *ppTransfer)
     1149{
     1150    return ShClTransferCreateEx(enmDir, enmSource, pCallbacks,
    11401151                                SHCL_TRANSFER_DEFAULT_MAX_CHUNK_SIZE,
    11411152                                SHCL_TRANSFER_DEFAULT_MAX_LIST_HANDLES,
     
    14691480 *                              destination callback table will be unset.
    14701481 */
    1471 void ShClTransferCopyCallbacks(PSHCLTRANSFERCALLBACKS pCallbacksDst,
    1472                                PSHCLTRANSFERCALLBACKS pCallbacksSrc)
     1482static void shClTransferCopyCallbacks(PSHCLTRANSFERCALLBACKS pCallbacksDst, PSHCLTRANSFERCALLBACKS pCallbacksSrc)
    14731483{
    14741484    AssertPtrReturnVoid(pCallbacksDst);
     1485    /* pCallbacksSrc can be NULL */
    14751486
    14761487    if (pCallbacksSrc) /* Set */
     
    15081519 * @note    Must come before initializing the transfer via ShClTransferInit().
    15091520 */
    1510 void ShClTransferSetCallbacks(PSHCLTRANSFER pTransfer,
    1511                               PSHCLTRANSFERCALLBACKS pCallbacks)
     1521static void shClTransferSetCallbacks(PSHCLTRANSFER pTransfer, PSHCLTRANSFERCALLBACKS pCallbacks)
    15121522{
    15131523    AssertPtrReturnVoid(pTransfer);
    15141524    /* pCallbacks can be NULL. */
    15151525
    1516     ShClTransferCopyCallbacks(&pTransfer->Callbacks, pCallbacks);
     1526    shClTransferCopyCallbacks(&pTransfer->Callbacks, pCallbacks);
    15171527
    15181528    /* Make sure that the callback context has all values set according to the callback table.
  • trunk/src/VBox/GuestHost/SharedClipboard/testcase/tstClipboardHttpServer.cpp

    r100367 r100393  
    212212            {
    213213                PSHCLTRANSFER pTx;
    214                 RTTEST_CHECK_RC_OK(hTest, ShClTransferCreate(SHCLTRANSFERDIR_TO_REMOTE, SHCLSOURCE_LOCAL, &pTx));
     214                RTTEST_CHECK_RC_OK(hTest, ShClTransferCreate(SHCLTRANSFERDIR_TO_REMOTE, SHCLSOURCE_LOCAL, NULL /* Callbacks */, &pTx));
    215215                RTTEST_CHECK_RC_OK(hTest, ShClTransferSetProvider(pTx, &Provider));
    216216                RTTEST_CHECK_RC_OK(hTest, ShClTransferInit(pTx));
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