SharedClipboard.h revision 289fdd35bf70c71ed32075f45c3af244431ffa71
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk/** @file
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Shared Clipboard
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk/*
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Copyright (C) 2006-2007 Sun Microsystems, Inc.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * This file is part of VirtualBox Open Source Edition (OSE), as
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * available from http://www.virtualbox.org. This file is free software;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * you can redistribute it and/or modify it under the terms of the GNU
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * General Public License (GPL) as published by the Free Software
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Foundation, in version 2 as it comes in the "COPYING" file of the
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * The contents of this file may alternatively be used under the terms
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * of the Common Development and Distribution License Version 1.0
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * VirtualBox OSE distribution, in which case the provisions of the
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * CDDL are applicable instead of those of the GPL.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * You may elect to license modified versions of this file under the
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * terms and conditions of either the GPL or the CDDL or both.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * Clara, CA 95054 USA or visit http://www.sun.com if you need
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * additional information or have any questions.
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk#ifndef ___GUESTHOST_VBOXCLIPBOARD__H
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk#define ___GUESTHOST_VBOXCLIPBOARD__H
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk#include <iprt/cdefs.h>
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk#include <iprt/types.h>
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkenum {
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /** The number of milliseconds before the clipboard times out. */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk CLIPBOARD_TIMEOUT = 5000
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk};
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk/** Opaque data structure for the X11/VBox frontend/glue code. */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkstruct _VBOXCLIPBOARDCONTEXT;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenktypedef struct _VBOXCLIPBOARDCONTEXT VBOXCLIPBOARDCONTEXT;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk/** Opaque data structure for the X11/VBox backend code. */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkstruct _VBOXCLIPBOARDCONTEXTX11;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenktypedef struct _VBOXCLIPBOARDCONTEXTX11 VBOXCLIPBOARDCONTEXTX11;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk/** A structure containing information about where to store a request
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * for the X11 clipboard contents. */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkstruct _VBOXCLIPBOARDREQUEST
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk{
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /** The buffer to write X11 clipboard data to (valid during a request
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * for the clipboard contents) */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk void *pv;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /** The size of the buffer to write X11 clipboard data to (valid during
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * a request for the clipboard contents) */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk unsigned cb;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /** The size of the X11 clipboard data written to the buffer (valid
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk * during a request for the clipboard contents) */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk uint32_t *pcbActual;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /** The format VBox would like the data in */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk uint32_t format;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /** Return code for the request processing code */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk int rc;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /** Semaphore which is signalled when the request is completed */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk RTSEMEVENT finished;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk /** The clipboard context this request is associated with */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk VBOXCLIPBOARDCONTEXTX11 *pCtx;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk};
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenktypedef struct _VBOXCLIPBOARDREQUEST VBOXCLIPBOARDREQUEST;
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk/* APIs exported by the X11 backend */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkextern VBOXCLIPBOARDCONTEXTX11 *VBoxX11ClipboardConstructX11
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk (VBOXCLIPBOARDCONTEXT *pFrontend);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkextern void VBoxX11ClipboardDestructX11(VBOXCLIPBOARDCONTEXTX11 *pBackend);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkextern int VBoxX11ClipboardStartX11(VBOXCLIPBOARDCONTEXTX11 *pBackend);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkextern int VBoxX11ClipboardStopX11(VBOXCLIPBOARDCONTEXTX11 *pBackend);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkextern void VBoxX11ClipboardAnnounceVBoxFormat(VBOXCLIPBOARDCONTEXTX11
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk *pBackend, uint32_t u32Formats);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkextern int VBoxX11ClipboardReadX11Data(VBOXCLIPBOARDCONTEXTX11 *pBackend,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk uint32_t u32Format,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk void *pv, uint32_t cb,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk uint32_t *pcbActual);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk/* APIs exported by the X11/VBox frontend */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkextern int VBoxX11ClipboardReadVBoxData(VBOXCLIPBOARDCONTEXT *pCtx,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk uint32_t u32Format, void **ppv,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk uint32_t *pcb);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenkextern void VBoxX11ClipboardReportX11Formats(VBOXCLIPBOARDCONTEXT *pCtx,
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk uint32_t u32Formats);
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk#endif /* ___GUESTHOST_VBOXCLIPBOARD__H */
4b8d88eb610aa1e0bb6ec632f792744b3d6b5f22jeff.schenk