VBoxClipboard.h revision 929fb9ebb388276d4f0e544ab804c076669f5bdd
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync/** @file
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync *
248c89033c87fed7229aa29bbbc4f4698fb13687vboxsync * Shared Clipboard
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync */
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync/*
248c89033c87fed7229aa29bbbc4f4698fb13687vboxsync * Copyright (C) 2006-2007 innotek GmbH
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync *
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync * available from http://www.virtualbox.org. This file is free software;
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync * General Public License as published by the Free Software Foundation,
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync * distribution. VirtualBox OSE is distributed in the hope that it will
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync * be useful, but WITHOUT ANY WARRANTY of any kind.
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync *
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync * If you received this file as part of a commercial VirtualBox
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync * distribution, then only the terms of your commercial VirtualBox
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync * license agreement apply instead of the previous paragraph.
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync */
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync#ifndef __VBOXCLIPBOARD__H
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync#define __VBOXCLIPBOARD__H
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync#define LOG_GROUP LOG_GROUP_HGCM
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync#include <VBox/log.h>
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync/** Constants needed for string conversions done by the Linux clipboard code. */
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsyncenum {
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync /** In Linux, lines end with a linefeed character. */
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync LINEFEED = 0xa,
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync /** In Windows, lines end with a carriage return and a linefeed character. */
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync CARRIAGERETURN = 0xd,
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync /** Little endian "real" Utf16 strings start with this marker. */
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync UTF16LEMARKER = 0xfeff,
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync /** Big endian "real" Utf16 strings start with this marker. */
c10a6f0c7041e4d1ee50ad38425aab9d43c55522vboxsync UTF16BEMARKER = 0xfffe
c10a6f0c7041e4d1ee50ad38425aab9d43c55522vboxsync};
c10a6f0c7041e4d1ee50ad38425aab9d43c55522vboxsync
c10a6f0c7041e4d1ee50ad38425aab9d43c55522vboxsyncenum {
c10a6f0c7041e4d1ee50ad38425aab9d43c55522vboxsync /** The number of milliseconds before the clipboard times out. */
c10a6f0c7041e4d1ee50ad38425aab9d43c55522vboxsync CLIPBOARDTIMEOUT = 2000
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync};
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsyncstruct _VBOXCLIPBOARDCONTEXT;
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsynctypedef struct _VBOXCLIPBOARDCONTEXT VBOXCLIPBOARDCONTEXT;
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsynctypedef struct _VBOXCLIPBOARDCLIENTDATA
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync{
5050fc8de0b121eab1b738d7c1007cde4903284dvboxsync struct _VBOXCLIPBOARDCLIENTDATA *pNext;
c89333d3e41e439ed9e74768000edc399d3e72e6vboxsync struct _VBOXCLIPBOARDCLIENTDATA *pPrev;
c89333d3e41e439ed9e74768000edc399d3e72e6vboxsync
5050fc8de0b121eab1b738d7c1007cde4903284dvboxsync VBOXCLIPBOARDCONTEXT *pCtx;
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync uint32_t u32ClientID;
c89333d3e41e439ed9e74768000edc399d3e72e6vboxsync
c89333d3e41e439ed9e74768000edc399d3e72e6vboxsync bool fAsync: 1; /* Guest is waiting for a message. */
c89333d3e41e439ed9e74768000edc399d3e72e6vboxsync
c89333d3e41e439ed9e74768000edc399d3e72e6vboxsync bool fMsgQuit: 1;
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync bool fMsgReadData: 1;
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync bool fMsgFormats: 1;
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync struct {
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync VBOXHGCMCALLHANDLE callHandle;
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync VBOXHGCMSVCPARM *paParms;
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync } async;
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync struct {
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync void *pv;
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync uint32_t cb;
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync uint32_t u32Format;
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync } data;
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync uint32_t u32AvailableFormats;
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync uint32_t u32RequestedFormat;
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync} VBOXCLIPBOARDCLIENTDATA;
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync/*
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync * The service functions. Locking is between the service thread and the platform dependedn windows thread.
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync */
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsyncbool vboxSvcClipboardLock (void);
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsyncvoid vboxSvcClipboardUnlock (void);
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsyncvoid vboxSvcClipboardReportMsg (VBOXCLIPBOARDCLIENTDATA *pClient, uint32_t u32Msg, uint32_t u32Formats);
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync/*
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync * Platform dependent functions.
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync */
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsyncint vboxClipboardInit (void);
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsyncvoid vboxClipboardDestroy (void);
750df3fe104e01cadbc3d5bd20243055d283d4e5vboxsync
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsyncint vboxClipboardConnect (VBOXCLIPBOARDCLIENTDATA *pClient);
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsyncvoid vboxClipboardDisconnect (VBOXCLIPBOARDCLIENTDATA *pClient);
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsyncvoid vboxClipboardFormatAnnounce (VBOXCLIPBOARDCLIENTDATA *pClient, uint32_t u32Formats);
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsyncint vboxClipboardReadData (VBOXCLIPBOARDCLIENTDATA *pClient, uint32_t u32Format, void *pv, uint32_t cb, uint32_t *pcbActual);
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsyncvoid vboxClipboardWriteData (VBOXCLIPBOARDCLIENTDATA *pClient, void *pv, uint32_t cb, uint32_t u32Format);
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsyncint vboxClipboardSync (VBOXCLIPBOARDCLIENTDATA *pClient);
553a2f0d8ef91a6dad8de4eef206ff093af53a5dvboxsync
ffb50166c9adb4ae583b914d405197035cf890advboxsync#endif /* __VBOXCLIPBOARD__H */
ffb50166c9adb4ae583b914d405197035cf890advboxsync