VirtualBox

source: vbox/trunk/include/VBox/HostServices/DragAndDropSvc.h@ 42264

Last change on this file since 42264 was 42264, checked in by vboxsync, 12 years ago

OSE build fix

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 10.6 KB
Line 
1/** @file
2 * Drag and Drop service - Common header for host service and guest clients.
3 */
4
5/*
6 * Copyright (C) 2011-2012 Oracle Corporation
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.virtualbox.org. This file is free software;
10 * you can redistribute it and/or modify it under the terms of the GNU
11 * General Public License (GPL) as published by the Free Software
12 * Foundation, in version 2 as it comes in the "COPYING" file of the
13 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15 *
16 * The contents of this file may alternatively be used under the terms
17 * of the Common Development and Distribution License Version 1.0
18 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
19 * VirtualBox OSE distribution, in which case the provisions of the
20 * CDDL are applicable instead of those of the GPL.
21 *
22 * You may elect to license modified versions of this file under the
23 * terms and conditions of either the GPL or the CDDL or both.
24 */
25
26#ifndef ___VBox_HostService_DragAndDropSvc_h
27#define ___VBox_HostService_DragAndDropSvc_h
28
29#include <VBox/VMMDev.h>
30#include <VBox/VBoxGuest2.h>
31
32/*
33 * The mode of operations.
34 */
35#define VBOX_DRAG_AND_DROP_MODE_OFF 0
36#define VBOX_DRAG_AND_DROP_MODE_HOST_TO_GUEST 1
37#define VBOX_DRAG_AND_DROP_MODE_GUEST_TO_HOST 2
38#define VBOX_DRAG_AND_DROP_MODE_BIDIRECTIONAL 3
39
40#define DND_IGNORE_ACTION UINT32_C(0)
41#define DND_COPY_ACTION RT_BIT_32(0)
42#define DND_MOVE_ACTION RT_BIT_32(1)
43#define DND_LINK_ACTION RT_BIT_32(2)
44
45#define hasDnDCopyAction(a) ((a) && DND_COPY_ACTION)
46#define hasDnDMoveAction(a) ((a) && DND_MOVE_ACTION)
47#define hasDnDLinkAction(a) ((a) && DND_LINK_ACTION)
48
49#define isDnDIgnoreAction(a) ((a) == DND_IGNORE_ACTION)
50#define isDnDCopyAction(a) ((a) == DND_COPY_ACTION)
51#define isDnDMoveAction(a) ((a) == DND_MOVE_ACTION)
52#define isDnDLinkAction(a) ((a) == DND_LINK_ACTION)
53
54/* Everything defined in this file lives in this namespace. */
55namespace DragAndDropSvc {
56
57/******************************************************************************
58* Typedefs, constants and inlines *
59******************************************************************************/
60
61/**
62 * The service functions which are callable by host.
63 */
64enum eHostFn
65{
66 HOST_DND_SET_MODE = 100,
67
68 /* H->G */
69 HOST_DND_HG_EVT_ENTER = 200,
70 HOST_DND_HG_EVT_MOVE,
71 HOST_DND_HG_EVT_LEAVE,
72 HOST_DND_HG_EVT_DROPPED,
73 HOST_DND_HG_EVT_CANCEL,
74 HOST_DND_HG_SND_DATA,
75 HOST_DND_HG_SND_MORE_DATA,
76 HOST_DND_HG_SND_DIR,
77 HOST_DND_HG_SND_FILE,
78
79 /* G->H */
80 HOST_DND_GH_REQ_PENDING = 300,
81 HOST_DND_GH_EVT_DROPPED
82};
83
84/**
85 * The service functions which are called by guest.
86 */
87enum eGuestFn
88{
89 /**
90 * Guest waits for a new message the host wants to process on the guest side.
91 * This is a blocking call and can be deferred.
92 */
93 GUEST_DND_GET_NEXT_HOST_MSG = 300,
94
95 /* H->G */
96 GUEST_DND_HG_ACK_OP = 400,
97 GUEST_DND_HG_REQ_DATA,
98 GUEST_DND_HG_EVT_PROGRESS,
99
100 /* G->H */
101 GUEST_DND_GH_ACK_PENDING = 500,
102 GUEST_DND_GH_SND_DATA,
103 GUEST_DND_GH_EVT_ERROR
104};
105
106/**
107 * The possible states for the progress operations.
108 */
109enum
110{
111 DND_PROGRESS_RUNNING = 1,
112 DND_PROGRESS_COMPLETE,
113 DND_PROGRESS_CANCELLED,
114 DND_PROGRESS_ERROR
115};
116
117#pragma pack (1)
118
119/*
120 * Host events
121 */
122
123typedef struct VBOXDNDHGACTIONMSG
124{
125 VBoxGuestHGCMCallInfo hdr;
126
127 /**
128 * HG Action event.
129 *
130 * Used by:
131 * HOST_DND_HG_EVT_ENTER
132 * HOST_DND_HG_EVT_MOVE
133 * HOST_DND_HG_EVT_DROPPED
134 */
135 HGCMFunctionParameter uScreenId; /* OUT uint32_t */
136 HGCMFunctionParameter uX; /* OUT uint32_t */
137 HGCMFunctionParameter uY; /* OUT uint32_t */
138 HGCMFunctionParameter uDefAction; /* OUT uint32_t */
139 HGCMFunctionParameter uAllActions; /* OUT uint32_t */
140 HGCMFunctionParameter pvFormats; /* OUT ptr */
141 HGCMFunctionParameter cFormats; /* OUT uint32_t */
142} VBOXDNDHGACTIONMSG;
143
144typedef struct VBOXDNDHGLEAVEMSG
145{
146 VBoxGuestHGCMCallInfo hdr;
147 /**
148 * HG Leave event.
149 *
150 * Used by:
151 * HOST_DND_HG_EVT_LEAVE
152 */
153} VBOXDNDHGLEAVEMSG;
154
155typedef struct VBOXDNDHGCANCELMSG
156{
157 VBoxGuestHGCMCallInfo hdr;
158
159 /**
160 * HG Cancel return event.
161 *
162 * Used by:
163 * HOST_DND_HG_EVT_CANCEL
164 */
165} VBOXDNDHGCANCELMSG;
166
167typedef struct VBOXDNDHGSENDDATAMSG
168{
169 VBoxGuestHGCMCallInfo hdr;
170
171 /**
172 * HG Send Data event.
173 *
174 * Used by:
175 * HOST_DND_HG_SND_DATA
176 */
177 HGCMFunctionParameter uScreenId; /* OUT uint32_t */
178 HGCMFunctionParameter pvFormat; /* OUT ptr */
179 HGCMFunctionParameter cFormat; /* OUT uint32_t */
180 HGCMFunctionParameter pvData; /* OUT ptr */
181 HGCMFunctionParameter cData; /* OUT uint32_t */
182} VBOXDNDHGSENDDATAMSG;
183
184typedef struct VBOXDNDHGSENDMOREDATAMSG
185{
186 VBoxGuestHGCMCallInfo hdr;
187
188 /**
189 * HG Send More Data event.
190 *
191 * Used by:
192 * HOST_DND_HG_SND_MORE_DATA
193 */
194 HGCMFunctionParameter pvData; /* OUT ptr */
195 HGCMFunctionParameter cData; /* OUT uint32_t */
196} VBOXDNDHGSENDMOREDATAMSG;
197
198typedef struct VBOXDNDHGSENDDIRMSG
199{
200 VBoxGuestHGCMCallInfo hdr;
201
202 /**
203 * HG Directory event.
204 *
205 * Used by:
206 * HOST_DND_HG_SND_DIR
207 */
208 HGCMFunctionParameter pvName; /* OUT ptr */
209 HGCMFunctionParameter cName; /* OUT uint32_t */
210 HGCMFunctionParameter fMode; /* OUT uint32_t */
211} VBOXDNDHGSENDDIRMSG;
212
213typedef struct VBOXDNDHGSENDFILEMSG
214{
215 VBoxGuestHGCMCallInfo hdr;
216
217 /**
218 * HG File event.
219 *
220 * Used by:
221 * HOST_DND_HG_SND_FILE
222 */
223 HGCMFunctionParameter pvName; /* OUT ptr */
224 HGCMFunctionParameter cName; /* OUT uint32_t */
225 HGCMFunctionParameter pvData; /* OUT ptr */
226 HGCMFunctionParameter cData; /* OUT uint32_t */
227 HGCMFunctionParameter fMode; /* OUT uint32_t */
228} VBOXDNDHGSENDFILEMSG;
229
230typedef struct VBOXDNDGHREQPENDINGMSG
231{
232 VBoxGuestHGCMCallInfo hdr;
233
234 /**
235 * GH Request Pending event.
236 *
237 * Used by:
238 * HOST_DND_GH_REQ_PENDING
239 */
240 HGCMFunctionParameter uScreenId; /* OUT uint32_t */
241} VBOXDNDGHREQPENDINGMSG;
242
243typedef struct VBOXDNDGHDROPPEDMSG
244{
245 VBoxGuestHGCMCallInfo hdr;
246
247 /**
248 * GH Dropped event.
249 *
250 * Used by:
251 * HOST_DND_GH_EVT_DROPPED
252 */
253 HGCMFunctionParameter pvFormat; /* OUT ptr */
254 HGCMFunctionParameter cFormat; /* OUT uint32_t */
255 HGCMFunctionParameter uAction; /* OUT uint32_t */
256} VBOXDNDGHDROPPEDMSG;
257
258/*
259 * Guest events
260 */
261
262typedef struct VBOXDNDNEXTMSGMSG
263{
264 VBoxGuestHGCMCallInfo hdr;
265
266 /**
267 * The returned command the host wants to
268 * run on the guest.
269 *
270 * Used by:
271 * GUEST_DND_GET_NEXT_HOST_MSG
272 */
273 HGCMFunctionParameter msg; /* OUT uint32_t */
274 /** Number of parameters the message needs. */
275 HGCMFunctionParameter num_parms; /* OUT uint32_t */
276 HGCMFunctionParameter block; /* OUT uint32_t */
277
278} VBOXDNDNEXTMSGMSG;
279
280typedef struct VBOXDNDHGACKOPMSG
281{
282 VBoxGuestHGCMCallInfo hdr;
283
284 /**
285 * HG Acknowledge Operation event.
286 *
287 * Used by:
288 * GUEST_DND_HG_ACK_OP
289 */
290 HGCMFunctionParameter uAction; /* OUT uint32_t */
291} VBOXDNDHGACKOPMSG;
292
293typedef struct VBOXDNDHGREQDATAMSG
294{
295 VBoxGuestHGCMCallInfo hdr;
296
297 /**
298 * HG request for data event.
299 *
300 * Used by:
301 * GUEST_DND_HG_REQ_DATA
302 */
303 HGCMFunctionParameter pFormat; /* OUT ptr */
304} VBOXDNDHGREQDATAMSG;
305
306typedef struct VBOXDNDGHACKPENDINGMSG
307{
308 VBoxGuestHGCMCallInfo hdr;
309
310 /**
311 * GH Acknowledge Pending event.
312 *
313 * Used by:
314 * GUEST_DND_GH_ACK_PENDING
315 */
316 HGCMFunctionParameter uDefAction; /* OUT uint32_t */
317 HGCMFunctionParameter uAllActions; /* OUT uint32_t */
318 HGCMFunctionParameter pFormat; /* OUT ptr */
319} VBOXDNDGHACKPENDINGMSG;
320
321typedef struct VBOXDNDGHSENDDATAMSG
322{
323 VBoxGuestHGCMCallInfo hdr;
324
325 /**
326 * GH Send Data event.
327 *
328 * Used by:
329 * GUEST_DND_GH_SND_DATA
330 */
331 HGCMFunctionParameter pData; /* OUT ptr */
332 HGCMFunctionParameter uSize; /* OUT uint32_t */
333} VBOXDNDGHSENDDATAMSG;
334
335typedef struct VBOXDNDGHEVTERRORMSG
336{
337 VBoxGuestHGCMCallInfo hdr;
338
339 /**
340 * GH Cancel Data event.
341 *
342 * Used by:
343 * GUEST_DND_GH_EVT_CANCEL
344 */
345 HGCMFunctionParameter uRC; /* OUT uint32_t */
346} VBOXDNDGHEVTERRORMSG;
347
348#pragma pack()
349
350/*
351 * Callback handler
352 */
353enum
354{
355 CB_MAGIC_DND_HG_ACK_OP = 0xe2100b93,
356 CB_MAGIC_DND_HG_REQ_DATA = 0x5cb3faf9,
357 CB_MAGIC_DND_HG_EVT_PROGRESS = 0x8c8a6956,
358 CB_MAGIC_DND_GH_ACK_PENDING = 0xbe975a14,
359 CB_MAGIC_DND_GH_SND_DATA = 0x4eb61bff,
360 CB_MAGIC_DND_GH_EVT_ERROR = 0x117a87c4
361};
362
363typedef struct VBOXDNDCBHEADERDATA
364{
365 /** Magic number to identify the structure. */
366 uint32_t u32Magic;
367 /** Context ID to identify callback data. */
368 uint32_t u32ContextID;
369} VBOXDNDCBHEADERDATA;
370typedef VBOXDNDCBHEADERDATA *PVBOXDNDCBHEADERDATA;
371
372typedef struct VBOXDNDCBHGACKOPDATA
373{
374 /** Callback data header. */
375 VBOXDNDCBHEADERDATA hdr;
376 uint32_t uAction;
377} VBOXDNDCBHGACKOPDATA;
378typedef VBOXDNDCBHGACKOPDATA *PVBOXDNDCBHGACKOPDATA;
379
380typedef struct VBOXDNDCBHGREQDATADATA
381{
382 /** Callback data header. */
383 VBOXDNDCBHEADERDATA hdr;
384 char *pszFormat;
385} VBOXDNDCBHGREQDATADATA;
386typedef VBOXDNDCBHGREQDATADATA *PVBOXDNDCBHGREQDATADATA;
387
388typedef struct VBOXDNDCBHGEVTPROGRESSDATA
389{
390 /** Callback data header. */
391 VBOXDNDCBHEADERDATA hdr;
392 uint32_t uPercentage;
393 uint32_t uState;
394} VBOXDNDCBHGEVTPROGRESSDATA;
395typedef VBOXDNDCBHGEVTPROGRESSDATA *PVBOXDNDCBHGEVTPROGRESSDATA ;
396
397typedef struct VBOXDNDCBGHACKPENDINGDATA
398{
399 /** Callback data header. */
400 VBOXDNDCBHEADERDATA hdr;
401 uint32_t uDefAction;
402 uint32_t uAllActions;
403 char *pszFormat;
404} VBOXDNDCBGHACKPENDINGDATA;
405typedef VBOXDNDCBGHACKPENDINGDATA *PVBOXDNDCBGHACKPENDINGDATA;
406
407typedef struct VBOXDNDCBSNDDATADATA
408{
409 /** Callback data header. */
410 VBOXDNDCBHEADERDATA hdr;
411 void *pvData;
412 uint32_t cbData;
413 uint32_t cbAllSize;
414} VBOXDNDCBSNDDATADATA;
415typedef VBOXDNDCBSNDDATADATA *PVBOXDNDCBSNDDATADATA;
416
417typedef struct VBOXDNDCBEVTERRORDATA
418{
419 /** Callback data header. */
420 VBOXDNDCBHEADERDATA hdr;
421 int32_t rc;
422} VBOXDNDCBEVTERRORDATA;
423typedef VBOXDNDCBEVTERRORDATA *PVBOXDNDCBEVTERRORDATA;
424
425
426} /* namespace DragAndDropSvc */
427
428#endif /* !___VBox_HostService_DragAndDropSvc_h */
429
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette