Changeset 18586 in vbox
- Timestamp:
- Mar 31, 2009 9:10:20 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
-
include/VBox/GuestHost/SharedClipboard.h (modified) (2 diffs)
-
src/VBox/GuestHost/SharedClipboard/x11-clipboard.cpp (modified) (9 diffs)
-
src/VBox/HostServices/SharedClipboard/x11-clipboard.cpp (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/GuestHost/SharedClipboard.h
r18585 r18586 31 31 }; 32 32 33 /** Opaque data structure for the X11/VBox frontend/glue code. */ 33 34 struct _VBOXCLIPBOARDCONTEXT; 34 35 typedef struct _VBOXCLIPBOARDCONTEXT VBOXCLIPBOARDCONTEXT; 36 37 /** Opaque data structure for the X11/VBox backend code. */ 38 struct _VBOXCLIPBOARDCONTEXTX11; 39 typedef struct _VBOXCLIPBOARDCONTEXTX11 VBOXCLIPBOARDCONTEXTX11; 35 40 36 41 /** Does X11 or VBox currently own the clipboard? */ … … 55 60 56 61 /* APIs exported by the X11 backend */ 57 extern void VBoxX11ClipboardAnnounceVBoxFormat (uint32_t u32Formats); 58 extern int VBoxX11ClipboardInitX11 (VBOXCLIPBOARDCONTEXT *pFrontend); 59 extern int VBoxX11ClipboardTermX11 (void); 60 extern int VBoxX11ClipboardStartX11 (enum g_eOwner owner); 61 extern void VBoxX11ClipboardRequestSyncX11 (void); 62 extern void VBoxX11ClipboardStopX11 (void); 63 extern void VBoxX11ClipboardAnnounceVBoxFormat (uint32_t u32Formats); 64 extern int VBoxX11ClipboardReadX11Data (uint32_t u32Format, 65 VBOXCLIPBOARDREQUEST *pRequest); 62 extern void VBoxX11ClipboardAnnounceVBoxFormat(uint32_t u32Formats); 63 extern int VBoxX11ClipboardInitX11(VBOXCLIPBOARDCONTEXT *pFrontend, 64 VBOXCLIPBOARDCONTEXTX11 **ppBackend); 65 extern int VBoxX11ClipboardTermX11(VBOXCLIPBOARDCONTEXTX11 *pBackend); 66 extern int VBoxX11ClipboardStartX11(VBOXCLIPBOARDCONTEXTX11 *pBackend, 67 enum g_eOwner owner); 68 extern void VBoxX11ClipboardRequestSyncX11(VBOXCLIPBOARDCONTEXTX11 *pBackend); 69 extern void VBoxX11ClipboardStopX11(VBOXCLIPBOARDCONTEXTX11 *pBackend); 70 extern void VBoxX11ClipboardAnnounceVBoxFormat(VBOXCLIPBOARDCONTEXTX11 71 *pBackend, uint32_t u32Formats); 72 extern int VBoxX11ClipboardReadX11Data(VBOXCLIPBOARDCONTEXTX11 *pBackend, 73 uint32_t u32Format, 74 VBOXCLIPBOARDREQUEST *pRequest); 66 75 67 76 /* APIs exported by the X11/VBox frontend */ 68 extern int VBoxX11ClipboardReadVBoxData (VBOXCLIPBOARDCONTEXT *pCtx,69 uint32_t u32Format, void **ppv,70 uint32_t *pcb);77 extern int VBoxX11ClipboardReadVBoxData(VBOXCLIPBOARDCONTEXT *pCtx, 78 uint32_t u32Format, void **ppv, 79 uint32_t *pcb); 71 80 extern void VBoxX11ClipboardReportX11Formats(VBOXCLIPBOARDCONTEXT *pCtx, 72 81 uint32_t u32Formats); -
trunk/src/VBox/GuestHost/SharedClipboard/x11-clipboard.cpp
r18585 r18586 134 134 RTSEMEVENT waitForData; 135 135 }; 136 137 typedef struct _VBOXCLIPBOARDCONTEXTX11 VBOXCLIPBOARDCONTEXTX11;138 136 139 137 /* Only one client is supported. There seems to be no need for more clients. … … 676 674 * @note X11 backend code 677 675 */ 678 int VBoxX11ClipboardInitX11 (VBOXCLIPBOARDCONTEXT *pFrontend) 676 int VBoxX11ClipboardInitX11(VBOXCLIPBOARDCONTEXT *pFrontend, 677 VBOXCLIPBOARDCONTEXTX11 **ppBackend) 679 678 { 680 679 int rc; … … 735 734 * @note X11 backend code 736 735 */ 737 int VBoxX11ClipboardTermX11 (void)736 int VBoxX11ClipboardTermX11(VBOXCLIPBOARDCONTEXTX11 *pBackend) 738 737 { 739 738 int rc, rcThread; … … 783 782 * @param owner who is the initial clipboard owner 784 783 */ 785 int VBoxX11ClipboardStartX11 (enum g_eOwner owner) 784 int VBoxX11ClipboardStartX11(VBOXCLIPBOARDCONTEXTX11 *pBackend, 785 enum g_eOwner owner) 786 786 { 787 787 LogFlowFunc(("\n")); … … 799 799 /** @todo Check whether the guest gets a format announcement at 800 800 * startup. */ 801 VBoxX11ClipboardAnnounceVBoxFormat( 0);801 VBoxX11ClipboardAnnounceVBoxFormat(pBackend, 0); 802 802 } 803 803 return VINF_SUCCESS; … … 808 808 * @note X11 backend code 809 809 */ 810 void VBoxX11ClipboardRequestSyncX11 (void)810 void VBoxX11ClipboardRequestSyncX11(VBOXCLIPBOARDCONTEXTX11 *pBackend) 811 811 { 812 812 /* … … 822 822 * @note X11 backend code 823 823 */ 824 void VBoxX11ClipboardStopX11 (void)824 void VBoxX11ClipboardStopX11(VBOXCLIPBOARDCONTEXTX11 *pBackend) 825 825 { 826 826 /* … … 1303 1303 * @note X11 backend code 1304 1304 */ 1305 void VBoxX11ClipboardAnnounceVBoxFormat (uint32_t u32Formats) 1305 void VBoxX11ClipboardAnnounceVBoxFormat(VBOXCLIPBOARDCONTEXTX11 *pBackend, 1306 uint32_t u32Formats) 1306 1307 { 1307 1308 /* … … 1356 1357 * @note X11 backend code 1357 1358 */ 1358 int VBoxX11ClipboardReadX11Data (uint32_t u32Format, 1359 VBOXCLIPBOARDREQUEST *pRequest) 1359 int VBoxX11ClipboardReadX11Data(VBOXCLIPBOARDCONTEXTX11 *pBackend, 1360 uint32_t u32Format, 1361 VBOXCLIPBOARDREQUEST *pRequest) 1360 1362 { 1361 1363 /* -
trunk/src/VBox/HostServices/SharedClipboard/x11-clipboard.cpp
r18585 r18586 54 54 RTSEMMUTEX clipboardMutex; 55 55 56 /** Pointer to the opaque X11 backend structure */ 57 VBOXCLIPBOARDCONTEXTX11 *pBackend; 56 58 /** Pointer to the client data structure */ 57 59 VBOXCLIPBOARDCLIENTDATA *pClient; … … 85 87 * data from X11. */ 86 88 LogFunc(("host requested guest clipboard data after guest had disconnected.\n")); 87 VBoxX11ClipboardAnnounceVBoxFormat( 0);89 VBoxX11ClipboardAnnounceVBoxFormat(pCtx->pBackend, 0); 88 90 pCtx->waiter = NONE; 89 91 return VERR_TIMEOUT; … … 162 164 { 163 165 int rc = VINF_SUCCESS; 166 VBOXCLIPBOARDCONTEXTX11 *pBackend = NULL; 167 164 168 LogRel(("Initializing host clipboard service\n")); 165 169 RTSemEventCreate(&g_ctxHost.waitForData); 166 170 RTSemMutexCreate(&g_ctxHost.clipboardMutex); 167 rc = VBoxX11ClipboardInitX11(&g_ctxHost );171 rc = VBoxX11ClipboardInitX11(&g_ctxHost, &pBackend); 168 172 if (RT_FAILURE(rc)) 169 173 { … … 172 176 LogRel(("Failed to start the host shared clipboard service.\n")); 173 177 } 178 else 179 g_ctxHost.pBackend = pBackend; 174 180 return rc; 175 181 } … … 197 203 * even if we are not waiting. */ 198 204 RTSemEventSignal(g_ctxHost.waitForData); 199 rc = VBoxX11ClipboardTermX11( );205 rc = VBoxX11ClipboardTermX11(g_ctxHost.pBackend); 200 206 if (RT_SUCCESS(rc)) 201 207 { … … 225 231 /** The pClient pointer is a dummy anyway, as we only support a single 226 232 * client at a time. */ 227 rc = VBoxX11ClipboardStartX11(X11 /* initial owner */); 233 rc = VBoxX11ClipboardStartX11(g_ctxHost.pBackend, 234 X11 /* initial owner */); 228 235 return rc; 229 236 } … … 246 253 vboxSvcClipboardReportMsg (g_ctxHost.pClient, 247 254 VBOX_SHARED_CLIPBOARD_HOST_MSG_FORMATS, 0); 248 VBoxX11ClipboardRequestSyncX11( );255 VBoxX11ClipboardRequestSyncX11(g_ctxHost.pBackend); 249 256 250 257 return VINF_SUCCESS; … … 261 268 RTSemMutexRequest(g_ctxHost.clipboardMutex, RT_INDEFINITE_WAIT); 262 269 g_ctxHost.pClient = NULL; 263 VBoxX11ClipboardStopX11( );270 VBoxX11ClipboardStopX11(g_ctxHost.pBackend); 264 271 RTSemMutexRelease(g_ctxHost.clipboardMutex); 265 272 } … … 274 281 void vboxClipboardFormatAnnounce (VBOXCLIPBOARDCLIENTDATA *pClient, uint32_t u32Formats) 275 282 { 276 VBoxX11ClipboardAnnounceVBoxFormat ( u32Formats);283 VBoxX11ClipboardAnnounceVBoxFormat (g_ctxHost.pBackend, u32Formats); 277 284 } 278 285 … … 302 309 request.cb = cb; 303 310 request.pcbActual = pcbActual; 304 rc = VBoxX11ClipboardReadX11Data( u32Format, &request);311 rc = VBoxX11ClipboardReadX11Data(g_ctxHost.pBackend, u32Format, &request); 305 312 g_ctxHost.waiter = NONE; 306 313 return rc; … … 316 323 * @note Host glue code 317 324 */ 318 void vboxClipboardWriteData (VBOXCLIPBOARDCLIENTDATA *pClient, void *pv, uint32_t cb, uint32_t u32Format) 325 void vboxClipboardWriteData (VBOXCLIPBOARDCLIENTDATA *pClient, 326 void *pv, uint32_t cb, uint32_t u32Format) 319 327 { 320 328 /* Assume that if this gets called at all then the X11 backend is running. */
Note:
See TracChangeset
for help on using the changeset viewer.

