VirtualBox

Ignore:
Timestamp:
Nov 11, 2019 4:36:41 PM (5 years ago)
Author:
vboxsync
Message:

Shared Clipboard: Update.

File:
1 edited

Legend:

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

    r81559 r81768  
    352352            {
    353353                const uint32_t cbPrealloc = _4K;
    354                 uint32_t cb = 0;
     354                      uint32_t cb        = 0;
    355355
    356356                /* Preallocate a buffer, most of small text transfers will fit into it. */
    357357                HANDLE hMem = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, cbPrealloc);
    358                 LogFlowFunc(("Preallocated handle hMem = %p\n", hMem));
    359 
    360358                if (hMem)
    361359                {
    362360                    void *pMem = GlobalLock(hMem);
    363                     LogFlowFunc(("Locked pMem = %p, GlobalSize = %ld\n", pMem, GlobalSize(hMem)));
    364 
    365361                    if (pMem)
    366362                    {
     363                        SHCLDATABLOCK dataBlock;
     364                        RT_ZERO(dataBlock);
     365
     366                        dataBlock.cbData  = cbPrealloc;
     367                        dataBlock.pvData  = pMem;
     368                        dataBlock.uFormat = fFormat;
     369
    367370                        /* Read the host data to the preallocated buffer. */
    368                         int rc = VbglR3ClipboardReadData(pCtx->CmdCtx.uClientID, fFormat, pMem, cbPrealloc, &cb);
    369                         LogFlowFunc(("VbglR3ClipboardReadData returned with rc = %Rrc\n",  rc));
    370 
     371                        int rc = VbglR3ClipboardReadDataEx(&pCtx->CmdCtx, &dataBlock, &cb);
    371372                        if (RT_SUCCESS(rc))
    372373                        {
     
    384385                                GlobalUnlock(hMem);
    385386
     387                                LogRel2(("Shared Clipboard: Buffer too small (%RU32), needs %RU32 bytes\n", cbPrealloc, cb));
     388
    386389                                /* The preallocated buffer is too small, adjust the size. */
    387390                                hMem = GlobalReAlloc(hMem, cb, 0);
    388                                 LogFlowFunc(("Reallocated hMem = %p\n", hMem));
    389 
    390391                                if (hMem)
    391392                                {
    392393                                    pMem = GlobalLock(hMem);
    393                                     LogFlowFunc(("Locked pMem = %p, GlobalSize = %ld\n", pMem, GlobalSize(hMem)));
    394 
    395394                                    if (pMem)
    396395                                    {
     396                                        dataBlock.cbData  = cb;
     397                                        dataBlock.pvData  = pMem;
     398
    397399                                        /* Read the host data to the preallocated buffer. */
    398400                                        uint32_t cbNew = 0;
    399                                         rc = VbglR3ClipboardReadData(pCtx->CmdCtx.uClientID, fFormat, pMem, cb, &cbNew);
    400                                         LogFlowFunc(("VbglR3ClipboardReadData returned with rc = %Rrc, cb = %d, cbNew = %d\n",
    401                                                      rc, cb, cbNew));
    402 
    403                                         if (RT_SUCCESS(rc)
     401                                        rc = VbglR3ClipboardReadDataEx(&pCtx->CmdCtx, &dataBlock, &cbNew);
     402                                        if (   RT_SUCCESS(rc)
    404403                                            && cbNew <= cb)
    405404                                        {
     
    408407                                        else
    409408                                        {
     409                                            LogRel(("Shared Clipboard: Receiving host data failed with %Rrc\n", rc));
     410
    410411                                            GlobalUnlock(hMem);
    411412                                            GlobalFree(hMem);
     
    415416                                    else
    416417                                    {
     418                                        LogRel(("Shared Clipboard: Error locking reallocated host data buffer\n"));
     419
    417420                                        GlobalFree(hMem);
    418421                                        hMem = NULL;
    419422                                    }
    420423                                }
     424                                else
     425                                    LogRel(("Shared Clipboard: No memory for reallocating host data buffer\n"));
    421426                            }
    422427
     
    433438                                    if (FAILED(hrc))
    434439                                    {
     440                                        LogRel(("Shared Clipboard: Received host data is invalid (%RU32 vs. %zu)\n",
     441                                                cb, cbActual));
     442
    435443                                        /* Discard invalid data. */
    436444                                        GlobalUnlock(hMem);
     
    453461
    454462                                hMem = GlobalReAlloc(hMem, cb, 0);
    455                                 LogFlowFunc(("Reallocated hMem = %p\n", hMem));
    456 
    457463                                if (hMem)
    458464                                {
     
    460466                                     * size is 'cb' and format is 'format'. */
    461467                                    HANDLE hClip = SetClipboardData(cfFormat, hMem);
    462                                     LogFlowFunc(("WM_RENDERFORMAT hClip = %p\n", hClip));
    463 
    464468                                    if (hClip)
    465469                                    {
     
    467471                                        break;
    468472                                    }
     473                                    else
     474                                        LogRel(("Shared Clipboard: Setting host data buffer to clipboard failed with %ld\n",
     475                                                GetLastError()));
    469476
    470477                                    /* Cleanup follows. */
    471478                                }
     479                                else
     480                                    LogRel(("Shared Clipboard: No memory for allocating final host data buffer\n"));
    472481                            }
    473482                        }
     483
    474484                        if (hMem)
    475485                            GlobalUnlock(hMem);
    476486                    }
     487                    else
     488                        LogRel(("Shared Clipboard: No memory for allocating host data buffer\n"));
     489
    477490                    if (hMem)
    478491                        GlobalFree(hMem);
     
    629642                    /* Requested clipboard format is not available, send empty data. */
    630643                    VbglR3ClipboardWriteData(pCtx->CmdCtx.uClientID, VBOX_SHCL_FMT_NONE, NULL, 0);
    631 #ifdef DEBUG_andy
    632                     AssertFailed();
    633 #endif
    634644                }
    635645
     
    983993        PVBGLR3CLIPBOARDEVENT pEvent = NULL;
    984994
    985         LogFlowFunc(("Waiting for host message (fHostFeatures=%#RX64) ...\n", pCtx->CmdCtx.fHostFeatures));
     995        LogFlowFunc(("Waiting for host message (fUseLegacyProtocol=%RTbool, fHostFeatures=%#RX64) ...\n",
     996                     pCtx->CmdCtx.fUseLegacyProtocol, pCtx->CmdCtx.fHostFeatures));
    986997
    987998        if (pCtx->CmdCtx.fUseLegacyProtocol)
     
    10251036                        rc = VERR_NOT_SUPPORTED;
    10261037                        break;
     1038                }
     1039
     1040                if (RT_SUCCESS(rc))
     1041                {
     1042                    /* Copy over our command context to the event. */
     1043                    pEvent->cmdCtx = pCtx->CmdCtx;
    10271044                }
    10281045            }
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