VirtualBox

Changeset 78474 in vbox for trunk/include/VBox


Ignore:
Timestamp:
May 13, 2019 7:44:15 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
130509
Message:

Shared Clipboard/URI: Update.

Location:
trunk/include/VBox/GuestHost
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/GuestHost/SharedClipboard-win.h

    r78440 r78474  
    3333#include <iprt/win/windows.h>
    3434
     35#include <VBox/GuestHost/SharedClipboard.h>
     36
    3537# ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST
    3638#  include <iprt/cpp/ministring.h> /* For RTCString. */
     39#  include <oleidl.h>
    3740# endif
    3841
     
    4144#endif
    4245
    43 #define VBOX_CLIPBOARD_WNDCLASS_NAME        "VBoxSharedClipboardClass"
    44 
    45 #define VBOX_CLIPBOARD_WIN_REGFMT_HTML      "VBox HTML Format"
     46#define VBOX_CLIPBOARD_WNDCLASS_NAME         "VBoxSharedClipboardClass"
     47
     48/** See: https://docs.microsoft.com/en-us/windows/desktop/dataxchg/html-clipboard-format
     49 *       Do *not* change the name, as this will break compatbility with other (legacy) applications! */
     50#define VBOX_CLIPBOARD_WIN_REGFMT_HTML       "HTML Format"
     51# ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST
     52#  define VBOX_CLIPBOARD_WIN_REGFMT_URI_LIST "VBoxURIList"
     53#endif
    4654
    4755/** Default timeout (in ms) for passing down messages down the clipboard chain. */
     
    8088    bool                   fCBChainPingInProcess;
    8189} VBOXCLIPBOARDWINAPIOLD, *PVBOXCLIPBOARDWINAPIOLD;
     90
     91#ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST
     92class VBoxClipboardWinDataObject;
     93
     94/**
     95 * Structure for keeping URI clipboard information around.
     96 */
     97typedef struct _VBOXCLIPBOARDWINURI
     98{
     99    UINT cfFileGroupDescriptor;
     100    UINT cfFileContents;
     101    VBoxClipboardWinDataObject *pDataObj;
     102} VBOXCLIPBOARDWINURI, *PVBOXCLIPBOARDWINURI;
     103#endif
    82104
    83105typedef struct VBOXCLIPBOARDWINCTX
     
    91113    /** Structure for maintaining the old clipboard API. */
    92114    VBOXCLIPBOARDWINAPIOLD oldAPI;
     115#ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST
     116    /** Structure for keeping URI clipboard information around. */
     117    VBOXCLIPBOARDWINURI    URI;
     118#endif
    93119} VBOXCLIPBOARDWINCTX, *PVBOXCLIPBOARDWINCTX;
    94120
     
    101127int VBoxClipboardWinRemoveFromCBChain(PVBOXCLIPBOARDWINCTX pCtx);
    102128VOID CALLBACK VBoxClipboardWinChainPingProc(HWND hWnd, UINT uMsg, ULONG_PTR dwData, LRESULT lResult);
    103 int VBoxClipboardWinGetFormats(PVBOXCLIPBOARDWINCTX pCtx, uint32_t *puFormats);
     129VBOXCLIPBOARDFORMAT VBoxClipboardWinClipboardFormatToVBox(UINT uFormat);
     130int VBoxClipboardWinGetFormats(PVBOXCLIPBOARDWINCTX pCtx, PVBOXCLIPBOARDFORMAT pfFormats);
    104131
    105132# ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST
    106 class VBoxClipboardWinDataObject : public IDataObject
     133class SharedClipboardURIList;
     134class FILEGROUPDESCRIPTOR;
     135
     136class VBoxClipboardWinDataObject : public IDataObject //, public IDataObjectAsyncCapability
    107137{
    108138public:
     
    111141    {
    112142        Uninitialized = 0,
    113         Initialized,
    114         Dropping,
    115         Dropped,
    116         Aborted
     143        Initialized
     144    };
     145
     146    enum FormatIndex
     147    {
     148        /** File descriptor, ANSI version. */
     149        FormatIndex_FileDescriptorA = 0,
     150        /** File descriptor, Unicode version. */
     151        FormatIndex_FileDescriptorW,
     152        /** File contents. */
     153        FormatIndex_FileContents
    117154    };
    118155
     
    140177    STDMETHOD(EnumDAdvise)(IEnumSTATDATA **ppEnumAdvise);
    141178
    142 public:
    143 
     179#ifdef VBOX_WITH_SHARED_CLIPBOARD_WIN_ASYNC
     180public: /* IDataObjectAsyncCapability methods. */
     181
     182    STDMETHOD(EndOperation)(HRESULT hResult, IBindCtx* pbcReserved, DWORD dwEffects);
     183    STDMETHOD(GetAsyncMode)(BOOL* pfIsOpAsync);
     184    STDMETHOD(InOperation)(BOOL* pfInAsyncOp);
     185    STDMETHOD(SetAsyncMode)(BOOL fDoOpAsync);
     186    STDMETHOD(StartOperation)(IBindCtx* pbcReserved);
     187#endif /* VBOX_WITH_SHARED_CLIPBOARD_WIN_ASYNC */
     188
     189public:
     190
     191    int Init(uint32_t idClient);
    144192    static const char* ClipboardFormatToString(CLIPFORMAT fmt);
    145193
    146     int Abort(void);
    147     void SetStatus(Status status);
    148     int Signal(const RTCString &strFormat, const void *pvData, uint32_t cbData);
    149 
    150194protected:
    151195
    152     bool LookupFormatEtc(LPFORMATETC pFormatEtc, ULONG *puIndex);
    153     static HGLOBAL MemDup(HGLOBAL hMemSource);
    154     void RegisterFormat(LPFORMATETC pFormatEtc, CLIPFORMAT clipFormat, TYMED tyMed = TYMED_HGLOBAL,
     196    static int Thread(RTTHREAD hThread, void *pvUser);
     197
     198    int copyToHGlobal(const void *pvData, size_t cbData, UINT fFlags, HGLOBAL *phGlobal);
     199    int createFileGroupDescriptor(const SharedClipboardURIList &URIList, HGLOBAL *phGlobal);
     200
     201    bool lookupFormatEtc(LPFORMATETC pFormatEtc, ULONG *puIndex);
     202    void registerFormat(LPFORMATETC pFormatEtc, CLIPFORMAT clipFormat, TYMED tyMed = TYMED_HGLOBAL,
    155203                        LONG lindex = -1, DWORD dwAspect = DVASPECT_CONTENT, DVTARGETDEVICE *pTargetDevice = NULL);
    156204
     
    160208    LPFORMATETC mpFormatEtc;
    161209    LPSTGMEDIUM mpStgMedium;
    162     RTSEMEVENT  mEventDropped;
    163     RTCString   mstrFormat;
    164     void       *mpvData;
    165     uint32_t    mcbData;
     210    /** The HGCM client ID for the URI data transfers. */
     211    uint32_t    muClientID;
     212    IStream    *mpStream;
    166213};
    167214
     
    173220    virtual ~VBoxClipboardWinEnumFormatEtc(void);
    174221
    175 public:
     222public: /* IUnknown methods. */
    176223
    177224    STDMETHOD(QueryInterface)(REFIID iid, void ** ppvObject);
    178225    STDMETHOD_(ULONG, AddRef)(void);
    179226    STDMETHOD_(ULONG, Release)(void);
     227
     228public: /* IEnumFORMATETC methods. */
    180229
    181230    STDMETHOD(Next)(ULONG cFormats, LPFORMATETC pFormatEtc, ULONG *pcFetched);
     
    197246};
    198247
    199 #  if 0
    200 class VBoxClipboardWinStreamImpl : public IDataObject
    201 {
    202 
     248/**
     249 * Own IStream implementation to implement file-based clipboard operations
     250 * through HGCM. Needed on Windows hosts and guests.
     251 */
     252class VBoxClipboardWinStreamImpl : public IStream
     253{
     254public:
     255
     256    VBoxClipboardWinStreamImpl(void);
     257    virtual ~VBoxClipboardWinStreamImpl(void);
     258
     259public: /* IUnknown methods. */
     260
     261    STDMETHOD(QueryInterface)(REFIID iid, void ** ppvObject);
     262    STDMETHOD_(ULONG, AddRef)(void);
     263    STDMETHOD_(ULONG, Release)(void);
     264
     265public: /* IStream methods. */
     266
     267    STDMETHOD(Clone)(IStream** ppStream);
     268    STDMETHOD(Commit)(DWORD dwFrags);
     269    STDMETHOD(CopyTo)(IStream* pDestStream, ULARGE_INTEGER nBytesToCopy, ULARGE_INTEGER* nBytesRead, ULARGE_INTEGER* nBytesWritten);
     270    STDMETHOD(LockRegion)(ULARGE_INTEGER nStart, ULARGE_INTEGER nBytes,DWORD dwFlags);
     271    STDMETHOD(Read)(void* pvBuffer, ULONG nBytesToRead, ULONG* nBytesRead);
     272    STDMETHOD(Revert)(void);
     273    STDMETHOD(Seek)(LARGE_INTEGER nMove, DWORD dwOrigin, ULARGE_INTEGER* nNewPos);
     274    STDMETHOD(SetSize)(ULARGE_INTEGER nNewSize);
     275    STDMETHOD(Stat)(STATSTG* statstg, DWORD dwFlags);
     276    STDMETHOD(UnlockRegion)(ULARGE_INTEGER nStart, ULARGE_INTEGER nBytes, DWORD dwFlags);
     277    STDMETHOD(Write)(const void* pvBuffer, ULONG nBytesToRead, ULONG* nBytesRead);
     278
     279public: /* Own methods. */
     280
     281    static HRESULT Create(IStream **ppStream);
     282
     283private:
     284
     285    LONG        m_lRefCount;
    203286};
    204 #  endif
    205287
    206288# endif /* VBOX_WITH_SHARED_CLIPBOARD_URI_LIST */
  • trunk/include/VBox/GuestHost/SharedClipboard.h

    r78440 r78474  
    3535/** A single Shared Clipboard format. */
    3636typedef uint32_t VBOXCLIPBOARDFORMAT;
     37/** Pointer to a single Shared Clipboard format. */
     38typedef VBOXCLIPBOARDFORMAT *PVBOXCLIPBOARDFORMAT;
    3739
    3840/** Bit map of Shared Clipboard format. */
    3941typedef uint32_t VBOXCLIPBOARDFORMATS;
     42/** Pointer to a bit map of Shared Clipboard format. */
     43typedef VBOXCLIPBOARDFORMATS *PVBOXCLIPBOARDFORMATS;
    4044
    4145/**
Note: See TracChangeset for help on using the changeset viewer.

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