Changeset 80990 in vbox for trunk/src/VBox/HostServices/SharedClipboard
- Timestamp:
- Sep 25, 2019 6:20:09 AM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 133584
- Location:
- trunk/src/VBox/HostServices/SharedClipboard
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-internal.h
r80866 r80990 223 223 224 224 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS 225 int sharedClipboardSvcTransfer Open(PSHCLPROVIDERCTX pCtx);226 DECLCALLBACK(int) sharedClipboardSvcTransferClose(PSHCLPROVIDERCTX pCtx);227 228 int sharedClipboardSvcTransfer GetRoots(PSHCLPROVIDERCTX pCtx, PSHCLROOTLIST *ppRootList);229 230 int sharedClipboardSvcTransfer ListOpen(PSHCLPROVIDERCTX pCtx, PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList);231 int sharedClipboardSvcTransfer ListClose(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList);232 int sharedClipboardSvcTransfer ListHdrRead(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr);233 int sharedClipboardSvcTransfer ListHdrWrite(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr);234 int sharedClipboardSvcTransfer ListEntryRead(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry);235 int sharedClipboardSvcTransfer ListEntryWrite(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry);236 237 int sharedClipboardSvcTransfer ObjOpen(PSHCLPROVIDERCTX pCtx, PSHCLOBJOPENCREATEPARMS pCreateParms,238 PSHCLOBJHANDLE phObj);239 int sharedClipboardSvcTransfer ObjClose(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj);240 int sharedClipboardSvcTransfer ObjRead(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,241 void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbRead);242 int sharedClipboardSvcTransfer ObjWrite(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,243 void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbWritten);225 int sharedClipboardSvcTransferIfaceOpen(PSHCLPROVIDERCTX pCtx); 226 int sharedClipboardSvcTransferIfaceClose(PSHCLPROVIDERCTX pCtx); 227 228 int sharedClipboardSvcTransferIfaceGetRoots(PSHCLPROVIDERCTX pCtx, PSHCLROOTLIST *ppRootList); 229 230 int sharedClipboardSvcTransferIfaceListOpen(PSHCLPROVIDERCTX pCtx, PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList); 231 int sharedClipboardSvcTransferIfaceListClose(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList); 232 int sharedClipboardSvcTransferIfaceListHdrRead(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr); 233 int sharedClipboardSvcTransferIfaceListHdrWrite(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr); 234 int sharedClipboardSvcTransferIfaceListEntryRead(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry); 235 int sharedClipboardSvcTransferIfaceListEntryWrite(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry); 236 237 int sharedClipboardSvcTransferIfaceObjOpen(PSHCLPROVIDERCTX pCtx, PSHCLOBJOPENCREATEPARMS pCreateParms, 238 PSHCLOBJHANDLE phObj); 239 int sharedClipboardSvcTransferIfaceObjClose(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj); 240 int sharedClipboardSvcTransferIfaceObjRead(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj, 241 void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbRead); 242 int sharedClipboardSvcTransferIfaceObjWrite(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj, 243 void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbWritten); 244 244 245 245 DECLCALLBACK(void) VBoxSvcClipboardTransferPrepareCallback(PSHCLTRANSFERCALLBACKDATA pData); -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-transfers.cpp
r80918 r80990 58 58 *********************************************************************************************************************************/ 59 59 60 DECLCALLBACK(int) sharedClipboardSvcTransfer Open(PSHCLPROVIDERCTX pCtx)60 DECLCALLBACK(int) sharedClipboardSvcTransferIfaceOpen(PSHCLPROVIDERCTX pCtx) 61 61 { 62 62 RT_NOREF(pCtx); … … 66 66 } 67 67 68 DECLCALLBACK(int) sharedClipboardSvcTransfer Close(PSHCLPROVIDERCTX pCtx)68 DECLCALLBACK(int) sharedClipboardSvcTransferIfaceClose(PSHCLPROVIDERCTX pCtx) 69 69 { 70 70 RT_NOREF(pCtx); … … 74 74 } 75 75 76 DECLCALLBACK(int) sharedClipboardSvcTransfer GetRoots(PSHCLPROVIDERCTX pCtx, PSHCLROOTLIST *ppRootList)76 DECLCALLBACK(int) sharedClipboardSvcTransferIfaceGetRoots(PSHCLPROVIDERCTX pCtx, PSHCLROOTLIST *ppRootList) 77 77 { 78 78 LogFlowFuncEnter(); … … 192 192 } 193 193 194 DECLCALLBACK(int) sharedClipboardSvcTransfer ListOpen(PSHCLPROVIDERCTX pCtx,195 PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList)194 DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListOpen(PSHCLPROVIDERCTX pCtx, 195 PSHCLLISTOPENPARMS pOpenParms, PSHCLLISTHANDLE phList) 196 196 { 197 197 LogFlowFuncEnter(); … … 251 251 } 252 252 253 DECLCALLBACK(int) sharedClipboardSvcTransfer ListClose(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList)253 DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListClose(PSHCLPROVIDERCTX pCtx, SHCLLISTHANDLE hList) 254 254 { 255 255 LogFlowFuncEnter(); … … 298 298 } 299 299 300 DECLCALLBACK(int) sharedClipboardSvcTransfer ListHdrRead(PSHCLPROVIDERCTX pCtx,301 SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr)300 DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListHdrRead(PSHCLPROVIDERCTX pCtx, 301 SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr) 302 302 { 303 303 LogFlowFuncEnter(); … … 315 315 316 316 HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID, 317 317 pCtx->pTransfer->State.uID, uEvent)); 318 318 HGCMSvcSetU64(&pMsg->paParms[1], hList); 319 319 HGCMSvcSetU32(&pMsg->paParms[2], 0 /* fFlags */); … … 349 349 } 350 350 351 DECLCALLBACK(int) sharedClipboardSvcTransfer ListHdrWrite(PSHCLPROVIDERCTX pCtx,352 SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr)351 DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListHdrWrite(PSHCLPROVIDERCTX pCtx, 352 SHCLLISTHANDLE hList, PSHCLLISTHDR pListHdr) 353 353 { 354 354 RT_NOREF(pCtx, hList, pListHdr); … … 359 359 } 360 360 361 DECLCALLBACK(int) sharedClipboardSvcTransfer ListEntryRead(PSHCLPROVIDERCTX pCtx,362 SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry)361 DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListEntryRead(PSHCLPROVIDERCTX pCtx, 362 SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry) 363 363 { 364 364 LogFlowFuncEnter(); … … 409 409 } 410 410 411 DECLCALLBACK(int) sharedClipboardSvcTransfer ListEntryWrite(PSHCLPROVIDERCTX pCtx,412 SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry)411 DECLCALLBACK(int) sharedClipboardSvcTransferIfaceListEntryWrite(PSHCLPROVIDERCTX pCtx, 412 SHCLLISTHANDLE hList, PSHCLLISTENTRY pListEntry) 413 413 { 414 414 RT_NOREF(pCtx, hList, pListEntry); … … 419 419 } 420 420 421 int sharedClipboardSvcTransfer ObjOpen(PSHCLPROVIDERCTX pCtx, PSHCLOBJOPENCREATEPARMS pCreateParms,422 PSHCLOBJHANDLE phObj)421 int sharedClipboardSvcTransferIfaceObjOpen(PSHCLPROVIDERCTX pCtx, PSHCLOBJOPENCREATEPARMS pCreateParms, 422 PSHCLOBJHANDLE phObj) 423 423 { 424 424 LogFlowFuncEnter(); … … 440 440 441 441 HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID, 442 442 pCtx->pTransfer->State.uID, uEvent)); 443 443 HGCMSvcSetU64(&pMsg->paParms[1], 0); /* uHandle */ 444 444 HGCMSvcSetU32(&pMsg->paParms[2], cbPath); … … 480 480 } 481 481 482 int sharedClipboardSvcTransfer ObjClose(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj)482 int sharedClipboardSvcTransferIfaceObjClose(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj) 483 483 { 484 484 LogFlowFuncEnter(); … … 496 496 497 497 HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID, 498 498 pCtx->pTransfer->State.uID, uEvent)); 499 499 HGCMSvcSetU64(&pMsg->paParms[1], hObj); 500 500 … … 533 533 } 534 534 535 int sharedClipboardSvcTransfer ObjRead(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,536 void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbRead)535 int sharedClipboardSvcTransferIfaceObjRead(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj, 536 void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbRead) 537 537 { 538 538 LogFlowFuncEnter(); … … 550 550 551 551 HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID, 552 552 pCtx->pTransfer->State.uID, uEvent)); 553 553 HGCMSvcSetU64(&pMsg->paParms[1], hObj); 554 554 HGCMSvcSetU32(&pMsg->paParms[2], cbData); … … 592 592 } 593 593 594 int sharedClipboardSvcTransfer ObjWrite(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj,595 void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbWritten)594 int sharedClipboardSvcTransferIfaceObjWrite(PSHCLPROVIDERCTX pCtx, SHCLOBJHANDLE hObj, 595 void *pvData, uint32_t cbData, uint32_t fFlags, uint32_t *pcbWritten) 596 596 { 597 597 LogFlowFuncEnter(); … … 609 609 610 610 HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID, 611 611 pCtx->pTransfer->State.uID, uEvent)); 612 612 HGCMSvcSetU64(&pMsg->paParms[1], hObj); 613 613 HGCMSvcSetU64(&pMsg->paParms[2], cbData); … … 2130 2130 if (RT_SUCCESS(rc)) 2131 2131 { 2132 creationCtx.Interface.pfnTransferOpen = sharedClipboardSvcTransferOpen; 2133 creationCtx.Interface.pfnTransferClose = sharedClipboardSvcTransferClose; 2134 creationCtx.Interface.pfnListOpen = sharedClipboardSvcTransferListOpen; 2135 creationCtx.Interface.pfnListClose = sharedClipboardSvcTransferListClose; 2136 creationCtx.Interface.pfnObjOpen = sharedClipboardSvcTransferObjOpen; 2137 creationCtx.Interface.pfnObjClose = sharedClipboardSvcTransferObjClose; 2138 2139 creationCtx.Interface.pfnRootsGet = sharedClipboardSvcTransferGetRoots; 2140 creationCtx.Interface.pfnListHdrRead = sharedClipboardSvcTransferListHdrRead; 2141 creationCtx.Interface.pfnListEntryRead = sharedClipboardSvcTransferListEntryRead; 2142 creationCtx.Interface.pfnObjRead = sharedClipboardSvcTransferObjRead; 2132 creationCtx.Interface.pfnTransferOpen = sharedClipboardSvcTransferIfaceOpen; 2133 creationCtx.Interface.pfnTransferClose = sharedClipboardSvcTransferIfaceClose; 2134 2135 creationCtx.Interface.pfnRootsGet = sharedClipboardSvcTransferIfaceGetRoots; 2136 2137 creationCtx.Interface.pfnListOpen = sharedClipboardSvcTransferIfaceListOpen; 2138 creationCtx.Interface.pfnListClose = sharedClipboardSvcTransferIfaceListClose; 2139 creationCtx.Interface.pfnListHdrRead = sharedClipboardSvcTransferIfaceListHdrRead; 2140 creationCtx.Interface.pfnListEntryRead = sharedClipboardSvcTransferIfaceListEntryRead; 2141 2142 creationCtx.Interface.pfnObjOpen = sharedClipboardSvcTransferIfaceObjOpen; 2143 creationCtx.Interface.pfnObjClose = sharedClipboardSvcTransferIfaceObjClose; 2144 creationCtx.Interface.pfnObjRead = sharedClipboardSvcTransferIfaceObjRead; 2143 2145 } 2144 2146 } 2145 2147 else if (enmDir == SHCLTRANSFERDIR_WRITE) 2146 2148 { 2147 creationCtx.Interface.pfnListHdrWrite = sharedClipboardSvcTransfer ListHdrWrite;2148 creationCtx.Interface.pfnListEntryWrite = sharedClipboardSvcTransfer ListEntryWrite;2149 creationCtx.Interface.pfnObjWrite = sharedClipboardSvcTransfer ObjWrite;2149 creationCtx.Interface.pfnListHdrWrite = sharedClipboardSvcTransferIfaceListHdrWrite; 2150 creationCtx.Interface.pfnListEntryWrite = sharedClipboardSvcTransferIfaceListEntryWrite; 2151 creationCtx.Interface.pfnObjWrite = sharedClipboardSvcTransferIfaceObjWrite; 2150 2152 } 2151 2153 else -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-win.cpp
r80866 r80990 213 213 case WM_CLIPBOARDUPDATE: 214 214 { 215 LogFunc(("WM_CLIPBOARDUPDATE : Waiting ...\n"));215 LogFunc(("WM_CLIPBOARDUPDATE\n")); 216 216 217 217 int rc = RTCritSectEnter(&pWinCtx->CritSect); … … 257 257 LogFunc(("WM_DRAWCLIPBOARD\n")); 258 258 259 if (GetClipboardOwner() != hWnd) 260 { 261 /* Clipboard was updated by another application, retrieve formats and report back. */ 262 int rc = vboxClipboardSvcWinSyncInternal(pCtx); 263 if (RT_SUCCESS(rc)) 264 sharedClipboardSvcSetSource(pCtx->pClient, SHCLSOURCE_LOCAL); 259 int rc = RTCritSectEnter(&pWinCtx->CritSect); 260 if (RT_SUCCESS(rc)) 261 { 262 const HWND hWndClipboardOwner = GetClipboardOwner(); 263 264 LogFunc(("WM_DRAWCLIPBOARD: hWndClipboardOwnerUs=%p, hWndNewClipboardOwner=%p\n", 265 pWinCtx->hWndClipboardOwnerUs, hWndClipboardOwner)); 266 267 if (pWinCtx->hWndClipboardOwnerUs != hWndClipboardOwner) 268 { 269 int rc2 = RTCritSectLeave(&pWinCtx->CritSect); 270 AssertRC(rc2); 271 272 /* Clipboard was updated by another application, retrieve formats and report back. */ 273 rc = vboxClipboardSvcWinSyncInternal(pCtx); 274 if (RT_SUCCESS(rc)) 275 sharedClipboardSvcSetSource(pCtx->pClient, SHCLSOURCE_LOCAL); 276 } 277 else 278 { 279 int rc2 = RTCritSectLeave(&pWinCtx->CritSect); 280 AssertRC(rc2); 281 } 265 282 } 266 283 … … 389 406 } 390 407 391 LogFlowFunc((" hWnd=%p, WM_ %u\n", hWnd, uMsg));408 LogFlowFunc(("LEAVE hWnd=%p, WM_ %u\n", hWnd, uMsg)); 392 409 return DefWindowProc(hWnd, uMsg, wParam, lParam); 393 410 } -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc-x11.cpp
r80858 r80990 59 59 /** 60 60 * Report formats available in the X11 clipboard to VBox. 61 * @param pCtx Opaque context pointer for the glue code 62 * @param u32Formats The formats available 63 * @note Host glue code 61 * @param pCtx Opaque context pointer for the glue code. 62 * @param u32Formats The formats available. 64 63 */ 65 64 void ClipReportX11Formats(SHCLCONTEXT *pCtx, uint32_t u32Formats) 66 65 { 67 66 LogFlowFunc(("pCtx=%p, u32Formats=%02X\n", pCtx, u32Formats)); 67 68 if (u32Formats == VBOX_SHCL_FMT_NONE) /* No formats to report? Bail out early. */ 69 return; 68 70 69 71 SHCLFORMATDATA formatData; -
trunk/src/VBox/HostServices/SharedClipboard/VBoxSharedClipboardSvc.cpp
r80918 r80990 937 937 if (pMsg) 938 938 { 939 SHCLEVENTID uEvent = SharedClipboardEventIDGenerate(&pClient->Events);939 const SHCLEVENTID uEvent = SharedClipboardEventIDGenerate(&pClient->Events); 940 940 941 941 HGCMSvcSetU32(&pMsg->paParms[0], VBOX_SHCL_CONTEXTID_MAKE(pClient->State.uSessionID, … … 948 948 { 949 949 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS 950 /* If this is an URI list, create a transfer locally and also tell the guest to create 951 * a transfer on the guest side. */ 950 952 if (pFormats->uFormats & VBOX_SHCL_FMT_URI_LIST) 951 953 { … … 955 957 LogRel(("Shared Clipboard: Initializing host write transfer failed with %Rrc\n", rc)); 956 958 } 959 else 960 { 957 961 #endif 958 if (RT_SUCCESS(rc))959 962 rc = sharedClipboardSvcClientWakeup(pClient); 963 964 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS 965 } 966 #endif 960 967 } 961 968 } … … 1322 1329 rc = VERR_ACCESS_DENIED; 1323 1330 } 1324 else 1331 else if (uFormats != VBOX_SHCL_FMT_NONE) /* Only announce formats if we actually *have* formats to announce! */ 1325 1332 { 1326 1333 rc = sharedClipboardSvcSetSource(pClient, SHCLSOURCE_REMOTE); … … 1334 1341 parms.uFormat = uFormats; 1335 1342 1336 g_ExtState.pfnExtension(g_ExtState.pvExtension, VBOX_CLIPBOARD_EXT_FN_FORMAT_ANNOUNCE, &parms, sizeof(parms)); 1343 g_ExtState.pfnExtension(g_ExtState.pvExtension, VBOX_CLIPBOARD_EXT_FN_FORMAT_ANNOUNCE, 1344 &parms, sizeof(parms)); 1337 1345 } 1338 1346 … … 1344 1352 1345 1353 formatData.uFormats = uFormats; 1354 Assert(formatData.uFormats != VBOX_SHCL_FMT_NONE); /* Sanity. */ 1346 1355 1347 1356 rc = SharedClipboardSvcImplFormatAnnounce(pClient, &cmdCtx, &formatData); … … 1413 1422 1414 1423 formatData.uFormats = g_ExtState.uDelayedFormats; 1424 Assert(formatData.uFormats != VBOX_SHCL_FMT_NONE); /* There better is *any* format here now. */ 1415 1425 1416 1426 int rc2 = sharedClipboardSvcFormatsReport(pClient, &formatData); … … 1544 1554 1545 1555 LogFlowFunc(("u32Function=%RU32 (%s), cParms=%RU32, paParms=%p\n", 1546 u32Function, VBoxShClHost MsgToStr(u32Function), cParms, paParms));1556 u32Function, VBoxShClHostFunctionToStr(u32Function), cParms, paParms)); 1547 1557 1548 1558 switch (u32Function) … … 1826 1836 g_ExtState.uDelayedFormats = u32Format; 1827 1837 } 1828 else 1838 else if (u32Format != VBOX_SHCL_FMT_NONE) 1829 1839 { 1830 1840 SHCLFORMATDATA formatData;
Note:
See TracChangeset
for help on using the changeset viewer.