VirtualBox

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


Ignore:
Timestamp:
Sep 19, 2019 12:14:07 PM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
133480
Message:

Shared Clipboard/Transfers: Update.

File:
1 edited

Legend:

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

    r80886 r80905  
    9494*********************************************************************************************************************************/
    9595#ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
    96 static DECLCALLBACK(void) vboxClipboardTransferCompleteCallback(PSHCLTRANSFERCALLBACKDATA pData, int rc);
    97 static DECLCALLBACK(void) vboxClipboardTransferErrorCallback(PSHCLTRANSFERCALLBACKDATA pData, int rc);
     96static DECLCALLBACK(int)  vboxClipboardOnTransferStartCallback(PSHCLTRANSFERCALLBACKDATA pData);
     97static DECLCALLBACK(void) vboxClipboardOnTransferCompleteCallback(PSHCLTRANSFERCALLBACKDATA pData, int rc);
     98static DECLCALLBACK(void) vboxClipboardOnTransferErrorCallback(PSHCLTRANSFERCALLBACKDATA pData, int rc);
    9899#endif
    99100
     
    183184}
    184185
    185 static DECLCALLBACK(void) vboxClipboardTransferCompleteCallback(PSHCLTRANSFERCALLBACKDATA pData, int rc)
    186 {
    187     RT_NOREF(rc);
    188 
    189     LogFlowFunc(("pData=%p, rc=%Rrc\n", pData, rc));
     186static DECLCALLBACK(int) vboxClipboardOnTransferStartCallback(PSHCLTRANSFERCALLBACKDATA pData)
     187{
     188    PSHCLCONTEXT pCtx = (PSHCLCONTEXT)pData->pvUser;
     189    AssertPtr(pCtx);
     190
     191    LogFlowFunc(("pCtx=%p\n", pCtx));
     192
     193    int rc = SharedClipboardWinOpen(pCtx->Win.hWnd);
     194    if (RT_SUCCESS(rc))
     195    {
     196        PSHCLTRANSFER pTransfer;
     197        rc = SharedClipboardTransferCreate(&pTransfer);
     198        if (RT_SUCCESS(rc))
     199            rc = SharedClipboardTransferInit(pTransfer, 0 /* uID */,
     200                                             SHCLTRANSFERDIR_WRITE, SHCLSOURCE_LOCAL);
     201        if (RT_SUCCESS(rc))
     202        {
     203            /* The data data in CF_HDROP format, as the files are locally present and don't need to be
     204             * presented as a IDataObject or IStream. */
     205            HANDLE hClip = hClip = GetClipboardData(CF_HDROP);
     206            if (hClip)
     207            {
     208                HDROP hDrop = (HDROP)GlobalLock(hClip);
     209                if (hDrop)
     210                {
     211                    char    *papszList = NULL;
     212                    uint32_t cbList;
     213                    rc = SharedClipboardWinDropFilesToStringList((DROPFILES *)hDrop, &papszList, &cbList);
     214
     215                    GlobalUnlock(hClip);
     216
     217                    if (RT_SUCCESS(rc))
     218                    {
     219                        rc = SharedClipboardTransferRootsSet(pTransfer,
     220                                                             papszList, cbList + 1 /* Include termination */);
     221                        RTStrFree(papszList);
     222                    }
     223                }
     224                else
     225                {
     226                    hClip = NULL;
     227                }
     228            }
     229        }
     230
     231        SharedClipboardWinClose();
     232    }
     233
     234    LogFlowFuncLeaveRC(rc);
     235    return rc;
     236}
     237
     238static DECLCALLBACK(void) vboxClipboardOnTransferCompleteCallback(PSHCLTRANSFERCALLBACKDATA pData, int rc)
     239{
     240    PSHCLCONTEXT pCtx = (PSHCLCONTEXT)pData->pvUser;
     241    AssertPtr(pCtx);
     242
     243    RT_NOREF(pCtx, rc);
     244
     245    LogFlowFunc(("pCtx=%p, rc=%Rrc\n", pCtx, rc));
    190246
    191247    LogRel2(("Shared Clipboard: Transfer to destination complete\n"));
     
    194250}
    195251
    196 static DECLCALLBACK(void) vboxClipboardTransferErrorCallback(PSHCLTRANSFERCALLBACKDATA pData, int rc)
    197 {
    198     RT_NOREF(rc);
    199 
    200     LogFlowFunc(("pData=%p, rc=%Rrc\n", pData, rc));
     252static DECLCALLBACK(void) vboxClipboardOnTransferErrorCallback(PSHCLTRANSFERCALLBACKDATA pData, int rc)
     253{
     254    PSHCLCONTEXT pCtx = (PSHCLCONTEXT)pData->pvUser;
     255    AssertPtr(pCtx);
     256
     257    RT_NOREF(pCtx, rc);
     258
     259    LogFlowFunc(("pCtx=%p, rc=%Rrc\n", pCtx, rc));
    201260
    202261    LogRel(("Shared Clipboard: Transfer to destination failed with %Rrc\n", rc));
     
    770829                   }
    771830               }
    772 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS
     831#if 0
    773832               else if (uFormat == VBOX_SHCL_FMT_URI_LIST)
    774833               {
     
    9791038               creationCtx.enmSource = SHCLSOURCE_REMOTE;
    9801039
    981                creationCtx.Interface.pfnGetRoots      = vboxClipboardTransferGetRoots;
     1040               creationCtx.Interface.pfnRootsGet      = vboxClipboardTransferGetRoots;
    9821041               creationCtx.Interface.pfnListOpen      = vboxClipboardTransferListOpen;
    9831042               creationCtx.Interface.pfnListClose     = vboxClipboardTransferListClose;
     
    11511210    }
    11521211    else
     1212    {
    11531213        LogRel(("Shared Clipboard: Initialized OLE\n"));
     1214
     1215        /* Install callbacks. */
     1216        RT_ZERO(pCtx->CmdCtx.Transfers.Callbacks);
     1217
     1218        pCtx->CmdCtx.Transfers.Callbacks.pvUser = pCtx; /* Assign context as user-provided callback data. */
     1219
     1220        pCtx->CmdCtx.Transfers.Callbacks.pfnTransferStart    = vboxClipboardOnTransferStartCallback;
     1221        pCtx->CmdCtx.Transfers.Callbacks.pfnTransferComplete = vboxClipboardOnTransferCompleteCallback;
     1222        pCtx->CmdCtx.Transfers.Callbacks.pfnTransferError    = vboxClipboardOnTransferErrorCallback;
     1223    }
    11541224#endif
    11551225
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