VirtualBox

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

最後變更 在這個檔案從49891是 49891,由 vboxsync 提交於 11 年 前

Merged private draganddrop branch into trunk.

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Author Date Id Revision
檔案大小: 10.8 KB
 
1/** @file
2 * Drag and Drop service - Common header for host service and guest clients.
3 */
4
5/*
6 * Copyright (C) 2011-2013 Oracle Corporation
7 *
8 * This file is part of VirtualBox Open Source Edition (OSE), as
9 * available from http://www.alldomusa.eu.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 /** Gets the actual MIME data, based on
75 * the format(s) specified by HOST_DND_HG_EVT_ENTER. */
76 HOST_DND_HG_SND_DATA,
77 /** Sent when the actual buffer for HOST_DND_HG_SND_DATA
78 * was too small. */
79 HOST_DND_HG_SND_MORE_DATA,
80 HOST_DND_HG_SND_DIR,
81 HOST_DND_HG_SND_FILE,
82
83 /* G->H */
84 HOST_DND_GH_REQ_PENDING = 300,
85 HOST_DND_GH_EVT_DROPPED
86};
87
88/**
89 * The service functions which are called by guest.
90 */
91enum eGuestFn
92{
93 /**
94 * Guest waits for a new message the host wants to process on the guest side.
95 * This is a blocking call and can be deferred.
96 */
97 GUEST_DND_GET_NEXT_HOST_MSG = 300,
98
99 /* H->G */
100 GUEST_DND_HG_ACK_OP = 400,
101 GUEST_DND_HG_REQ_DATA,
102 GUEST_DND_HG_EVT_PROGRESS,
103
104 /* G->H */
105 GUEST_DND_GH_ACK_PENDING = 500,
106 GUEST_DND_GH_SND_DATA,
107 GUEST_DND_GH_EVT_ERROR
108};
109
110/**
111 * The possible states for the progress operations.
112 */
113enum
114{
115 DND_PROGRESS_RUNNING = 1,
116 DND_PROGRESS_COMPLETE,
117 DND_PROGRESS_CANCELLED,
118 DND_PROGRESS_ERROR
119};
120
121#pragma pack (1)
122
123/*
124 * Host events
125 */
126
127typedef struct VBOXDNDHGACTIONMSG
128{
129 VBoxGuestHGCMCallInfo hdr;
130
131 /**
132 * HG Action event.
133 *
134 * Used by:
135 * HOST_DND_HG_EVT_ENTER
136 * HOST_DND_HG_EVT_MOVE
137 * HOST_DND_HG_EVT_DROPPED
138 */
139 HGCMFunctionParameter uScreenId; /* OUT uint32_t */
140 HGCMFunctionParameter uX; /* OUT uint32_t */
141 HGCMFunctionParameter uY; /* OUT uint32_t */
142 HGCMFunctionParameter uDefAction; /* OUT uint32_t */
143 HGCMFunctionParameter uAllActions; /* OUT uint32_t */
144 HGCMFunctionParameter pvFormats; /* OUT ptr */
145 HGCMFunctionParameter cFormats; /* OUT uint32_t */
146} VBOXDNDHGACTIONMSG;
147
148typedef struct VBOXDNDHGLEAVEMSG
149{
150 VBoxGuestHGCMCallInfo hdr;
151 /**
152 * HG Leave event.
153 *
154 * Used by:
155 * HOST_DND_HG_EVT_LEAVE
156 */
157} VBOXDNDHGLEAVEMSG;
158
159typedef struct VBOXDNDHGCANCELMSG
160{
161 VBoxGuestHGCMCallInfo hdr;
162
163 /**
164 * HG Cancel return event.
165 *
166 * Used by:
167 * HOST_DND_HG_EVT_CANCEL
168 */
169} VBOXDNDHGCANCELMSG;
170
171typedef struct VBOXDNDHGSENDDATAMSG
172{
173 VBoxGuestHGCMCallInfo hdr;
174
175 /**
176 * HG Send Data event.
177 *
178 * Used by:
179 * HOST_DND_HG_SND_DATA
180 */
181 HGCMFunctionParameter uScreenId; /* OUT uint32_t */
182 HGCMFunctionParameter pvFormat; /* OUT ptr */
183 HGCMFunctionParameter cFormat; /* OUT uint32_t */
184 HGCMFunctionParameter pvData; /* OUT ptr */
185 HGCMFunctionParameter cData; /* OUT uint32_t */
186} VBOXDNDHGSENDDATAMSG;
187
188typedef struct VBOXDNDHGSENDMOREDATAMSG
189{
190 VBoxGuestHGCMCallInfo hdr;
191
192 /**
193 * HG Send More Data event.
194 *
195 * Used by:
196 * HOST_DND_HG_SND_MORE_DATA
197 */
198 HGCMFunctionParameter pvData; /* OUT ptr */
199 HGCMFunctionParameter cData; /* OUT uint32_t */
200} VBOXDNDHGSENDMOREDATAMSG;
201
202typedef struct VBOXDNDHGSENDDIRMSG
203{
204 VBoxGuestHGCMCallInfo hdr;
205
206 /**
207 * HG Directory event.
208 *
209 * Used by:
210 * HOST_DND_HG_SND_DIR
211 */
212 HGCMFunctionParameter pvName; /* OUT ptr */
213 HGCMFunctionParameter cName; /* OUT uint32_t */
214 HGCMFunctionParameter fMode; /* OUT uint32_t */
215} VBOXDNDHGSENDDIRMSG;
216
217typedef struct VBOXDNDHGSENDFILEMSG
218{
219 VBoxGuestHGCMCallInfo hdr;
220
221 /**
222 * HG File event.
223 *
224 * Used by:
225 * HOST_DND_HG_SND_FILE
226 */
227 HGCMFunctionParameter pvName; /* OUT ptr */
228 HGCMFunctionParameter cName; /* OUT uint32_t */
229 HGCMFunctionParameter pvData; /* OUT ptr */
230 HGCMFunctionParameter cData; /* OUT uint32_t */
231 HGCMFunctionParameter fMode; /* OUT uint32_t */
232} VBOXDNDHGSENDFILEMSG;
233
234typedef struct VBOXDNDGHREQPENDINGMSG
235{
236 VBoxGuestHGCMCallInfo hdr;
237
238 /**
239 * GH Request Pending event.
240 *
241 * Used by:
242 * HOST_DND_GH_REQ_PENDING
243 */
244 HGCMFunctionParameter uScreenId; /* OUT uint32_t */
245} VBOXDNDGHREQPENDINGMSG;
246
247typedef struct VBOXDNDGHDROPPEDMSG
248{
249 VBoxGuestHGCMCallInfo hdr;
250
251 /**
252 * GH Dropped event.
253 *
254 * Used by:
255 * HOST_DND_GH_EVT_DROPPED
256 */
257 HGCMFunctionParameter pvFormat; /* OUT ptr */
258 HGCMFunctionParameter cFormat; /* OUT uint32_t */
259 HGCMFunctionParameter uAction; /* OUT uint32_t */
260} VBOXDNDGHDROPPEDMSG;
261
262/*
263 * Guest events
264 */
265
266typedef struct VBOXDNDNEXTMSGMSG
267{
268 VBoxGuestHGCMCallInfo hdr;
269
270 /**
271 * The returned command the host wants to
272 * run on the guest.
273 *
274 * Used by:
275 * GUEST_DND_GET_NEXT_HOST_MSG
276 */
277 HGCMFunctionParameter msg; /* OUT uint32_t */
278 /** Number of parameters the message needs. */
279 HGCMFunctionParameter num_parms; /* OUT uint32_t */
280 HGCMFunctionParameter block; /* OUT uint32_t */
281
282} VBOXDNDNEXTMSGMSG;
283
284typedef struct VBOXDNDHGACKOPMSG
285{
286 VBoxGuestHGCMCallInfo hdr;
287
288 /**
289 * HG Acknowledge Operation event.
290 *
291 * Used by:
292 * GUEST_DND_HG_ACK_OP
293 */
294 HGCMFunctionParameter uAction; /* OUT uint32_t */
295} VBOXDNDHGACKOPMSG;
296
297typedef struct VBOXDNDHGREQDATAMSG
298{
299 VBoxGuestHGCMCallInfo hdr;
300
301 /**
302 * HG request for data event.
303 *
304 * Used by:
305 * GUEST_DND_HG_REQ_DATA
306 */
307 HGCMFunctionParameter pFormat; /* OUT ptr */
308} VBOXDNDHGREQDATAMSG;
309
310typedef struct VBOXDNDGHACKPENDINGMSG
311{
312 VBoxGuestHGCMCallInfo hdr;
313
314 /**
315 * GH Acknowledge Pending event.
316 *
317 * Used by:
318 * GUEST_DND_GH_ACK_PENDING
319 */
320 HGCMFunctionParameter uDefAction; /* OUT uint32_t */
321 HGCMFunctionParameter uAllActions; /* OUT uint32_t */
322 HGCMFunctionParameter pFormat; /* OUT ptr */
323} VBOXDNDGHACKPENDINGMSG;
324
325typedef struct VBOXDNDGHSENDDATAMSG
326{
327 VBoxGuestHGCMCallInfo hdr;
328
329 /**
330 * GH Send Data event.
331 *
332 * Used by:
333 * GUEST_DND_GH_SND_DATA
334 */
335 HGCMFunctionParameter pData; /* OUT ptr */
336 HGCMFunctionParameter uSize; /* OUT uint32_t */
337} VBOXDNDGHSENDDATAMSG;
338
339typedef struct VBOXDNDGHEVTERRORMSG
340{
341 VBoxGuestHGCMCallInfo hdr;
342
343 /**
344 * GH Cancel Data event.
345 *
346 * Used by:
347 * GUEST_DND_GH_EVT_CANCEL
348 */
349 HGCMFunctionParameter uRC; /* OUT uint32_t */
350} VBOXDNDGHEVTERRORMSG;
351
352#pragma pack()
353
354/*
355 * Callback handler
356 */
357enum
358{
359 CB_MAGIC_DND_HG_ACK_OP = 0xe2100b93,
360 CB_MAGIC_DND_HG_REQ_DATA = 0x5cb3faf9,
361 CB_MAGIC_DND_HG_EVT_PROGRESS = 0x8c8a6956,
362 CB_MAGIC_DND_GH_ACK_PENDING = 0xbe975a14,
363 CB_MAGIC_DND_GH_SND_DATA = 0x4eb61bff,
364 CB_MAGIC_DND_GH_EVT_ERROR = 0x117a87c4
365};
366
367typedef struct VBOXDNDCBHEADERDATA
368{
369 /** Magic number to identify the structure. */
370 uint32_t u32Magic;
371 /** Context ID to identify callback data. */
372 uint32_t u32ContextID;
373} VBOXDNDCBHEADERDATA;
374typedef VBOXDNDCBHEADERDATA *PVBOXDNDCBHEADERDATA;
375
376typedef struct VBOXDNDCBHGACKOPDATA
377{
378 /** Callback data header. */
379 VBOXDNDCBHEADERDATA hdr;
380 uint32_t uAction;
381} VBOXDNDCBHGACKOPDATA;
382typedef VBOXDNDCBHGACKOPDATA *PVBOXDNDCBHGACKOPDATA;
383
384typedef struct VBOXDNDCBHGREQDATADATA
385{
386 /** Callback data header. */
387 VBOXDNDCBHEADERDATA hdr;
388 char *pszFormat;
389} VBOXDNDCBHGREQDATADATA;
390typedef VBOXDNDCBHGREQDATADATA *PVBOXDNDCBHGREQDATADATA;
391
392typedef struct VBOXDNDCBHGEVTPROGRESSDATA
393{
394 /** Callback data header. */
395 VBOXDNDCBHEADERDATA hdr;
396 uint32_t uPercentage;
397 uint32_t uState;
398 int rc;
399} VBOXDNDCBHGEVTPROGRESSDATA;
400typedef VBOXDNDCBHGEVTPROGRESSDATA *PVBOXDNDCBHGEVTPROGRESSDATA;
401
402typedef struct VBOXDNDCBGHACKPENDINGDATA
403{
404 /** Callback data header. */
405 VBOXDNDCBHEADERDATA hdr;
406 uint32_t uDefAction;
407 uint32_t uAllActions;
408 char *pszFormat;
409} VBOXDNDCBGHACKPENDINGDATA;
410typedef VBOXDNDCBGHACKPENDINGDATA *PVBOXDNDCBGHACKPENDINGDATA;
411
412typedef struct VBOXDNDCBSNDDATADATA
413{
414 /** Callback data header. */
415 VBOXDNDCBHEADERDATA hdr;
416 void *pvData;
417 uint32_t cbData;
418 uint32_t cbAllSize;
419} VBOXDNDCBSNDDATADATA;
420typedef VBOXDNDCBSNDDATADATA *PVBOXDNDCBSNDDATADATA;
421
422typedef struct VBOXDNDCBEVTERRORDATA
423{
424 /** Callback data header. */
425 VBOXDNDCBHEADERDATA hdr;
426 int32_t rc;
427} VBOXDNDCBEVTERRORDATA;
428typedef VBOXDNDCBEVTERRORDATA *PVBOXDNDCBEVTERRORDATA;
429
430
431} /* namespace DragAndDropSvc */
432
433#endif /* !___VBox_HostService_DragAndDropSvc_h */
434
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

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