VirtualBox

Changeset 78974 in vbox for trunk/include/VBox


Ignore:
Timestamp:
Jun 4, 2019 4:51:48 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
131100
Message:

Shared Clipboard/URI: Update.

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

Legend:

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

    r78950 r78974  
    3434#include <iprt/critsect.h>
    3535#include <iprt/fs.h>
     36#include <iprt/list.h>
    3637
    3738#include <iprt/cpp/list.h>
     
    452453public: /* Interface to be implemented. */
    453454
    454     virtual int ReadMetaData(uint32_t fFlags = 0) = 0;
    455     virtual int WriteMetaData(const void *pvBuf, size_t cbBuf, size_t *pcbWritten, uint32_t fFlags = 0) = 0;
    456 
    457     int ReadDirectory(PVBOXCLIPBOARDDIRDATA pDirData);
    458     int WriteDirectory(const PVBOXCLIPBOARDDIRDATA pDirData);
    459 
    460     int ReadFileHdr(PVBOXCLIPBOARDFILEHDR pFileHdr);
    461     int WriteFileHdr(const PVBOXCLIPBOARDFILEHDR pFileHdr);
    462     int ReadFileData(PVBOXCLIPBOARDFILEDATA pFileData);
    463     int WriteFileData(const PVBOXCLIPBOARDFILEDATA pFileData);
    464 
    465     virtual void Reset(void) = 0;
    466 
    467 public:
    468 
    469     const SharedClipboardURIList &GetURIList(void) { return m_URIList; }
     455    virtual int ReadMetaData(uint32_t fFlags = 0);
     456    virtual int WriteMetaData(const void *pvBuf, size_t cbBuf, size_t *pcbWritten, uint32_t fFlags = 0);
     457
     458    virtual int ReadDirectory(PVBOXCLIPBOARDDIRDATA pDirData);
     459    virtual int ReadDirectoryObj(SharedClipboardURIObject &Obj);
     460
     461    virtual int WriteDirectory(const PVBOXCLIPBOARDDIRDATA pDirData);
     462    virtual int WriteDirectoryObj(const SharedClipboardURIObject &Obj);
     463
     464    virtual int ReadFileHdr(PVBOXCLIPBOARDFILEHDR pFileHdr);
     465    virtual int ReadFileHdrObj(SharedClipboardURIObject &Obj);
     466
     467    virtual int WriteFileHdr(const PVBOXCLIPBOARDFILEHDR pFileHdr);
     468    virtual int WriteFileHdrObj(const SharedClipboardURIObject &Obj);
     469
     470    virtual int ReadFileData(PVBOXCLIPBOARDFILEDATA pFileData, uint32_t *pcbRead);
     471    virtual int ReadFileDataObj(SharedClipboardURIObject &Obj, uint32_t *pcbRead);
     472
     473    virtual int WriteFileData(const PVBOXCLIPBOARDFILEDATA pFileData, uint32_t *pcbWritten);
     474    virtual int WriteFileDataObj(const SharedClipboardURIObject &Obj, uint32_t *pcbWritten);
     475
     476    virtual void Reset(void);
     477
     478public:
     479
     480          SharedClipboardURIList   &GetURIList(void) { return m_URIList; }
    470481    const SharedClipboardURIObject *GetURIObjectCurrent(void) { return m_URIList.First(); }
    471482
     
    503514    int ReadFileHdr(PVBOXCLIPBOARDFILEHDR pFileHdr);
    504515    int WriteFileHdr(const PVBOXCLIPBOARDFILEHDR pFileHdr);
    505     int ReadFileData(PVBOXCLIPBOARDFILEDATA pFileData);
    506     int WriteFileData(const PVBOXCLIPBOARDFILEDATA pFileData);
     516    int ReadFileData(PVBOXCLIPBOARDFILEDATA pFileData, uint32_t *pcbRead);
     517    int WriteFileData(const PVBOXCLIPBOARDFILEDATA pFileData, uint32_t *pcbWritten);
    507518
    508519    void Reset(void);
     
    527538    virtual ~SharedClipboardProviderHostService(void);
    528539
    529 public:
    530 
    531     int ReadMetaData(uint32_t fFlags = 0);
    532     int WriteMetaData(const void *pvBuf, size_t cbBuf, size_t *pcbWritten, uint32_t fFlags = 0);
    533 
    534     int ReadDirectory(PVBOXCLIPBOARDDIRDATA pDirData);
    535     int WriteDirectory(const PVBOXCLIPBOARDDIRDATA pDirData);
    536 
    537     int ReadFileHdr(PVBOXCLIPBOARDFILEHDR pFileHdr);
    538     int WriteFileHdr(const PVBOXCLIPBOARDFILEHDR pFileHdr);
    539     int ReadFileData(PVBOXCLIPBOARDFILEDATA pFileData);
    540     int WriteFileData(const PVBOXCLIPBOARDFILEDATA pFileData);
    541 
    542     void Reset(void);
    543 
    544540protected:
    545541
     
    547543};
    548544
     545typedef DECLCALLBACK(int) FNSHAREDCLIPBOARDURITRANSFERSTARTED(void *pvUser);
     546/** Pointer to a FNSHAREDCLIPBOARDURITRANSFERSTARTED function. */
     547typedef FNSHAREDCLIPBOARDURITRANSFERSTARTED *PFNSHAREDCLIPBOARDURITRANSFERSTARTED;
     548
     549typedef DECLCALLBACK(int) FNSHAREDCLIPBOARDURITRANSFERCANCELED(void *pvUser);
     550/** Pointer to a FNSHAREDCLIPBOARDURITRANSFERCANCELED function. */
     551typedef FNSHAREDCLIPBOARDURITRANSFERCANCELED *PFNSHAREDCLIPBOARDURITRANSFERCANCELED;
     552
     553typedef DECLCALLBACK(int) FNSHAREDCLIPBOARDURITRANSFERCOMPLETE(void *pvUser, int rc);
     554/** Pointer to a FNSHAREDCLIPBOARDURITRANSFERCOMPLETE function. */
     555typedef FNSHAREDCLIPBOARDURITRANSFERCOMPLETE *PFNSHAREDCLIPBOARDURITRANSFERCOMPLETE;
     556
     557typedef DECLCALLBACK(int) FNSHAREDCLIPBOARDURITRANSFERERROR(void *pvUser, int rc);
     558/** Pointer to a FNSHAREDCLIPBOARDURITRANSFERERROR function. */
     559typedef FNSHAREDCLIPBOARDURITRANSFERERROR *PFNSHAREDCLIPBOARDURITRANSFERERROR;
     560
     561/**
     562 * Structure acting as a function callback table for URI transfers.
     563 * All callbacks are optional and therefore can be NULL.
     564 */
     565typedef struct _SHAREDCLIPBOARDURITRANSFERCALLBACKS
     566{
     567    /** Function pointer, called when the transfer has been started. */
     568    PFNSHAREDCLIPBOARDURITRANSFERSTARTED  pfnTransferStarted;
     569    /** Function pointer, called when the transfer is complete. */
     570    PFNSHAREDCLIPBOARDURITRANSFERCOMPLETE pfnTransferComplete;
     571    /** Function pointer, called when the transfer has been canceled. */
     572    PFNSHAREDCLIPBOARDURITRANSFERCANCELED pfnTransferCanceled;
     573    /** Function pointer, called when transfer resulted in an unrecoverable error. */
     574    PFNSHAREDCLIPBOARDURITRANSFERERROR    pfnTransferError;
     575} SHAREDCLIPBOARDURITRANSFERCALLBACKS, *PSHAREDCLIPBOARDURITRANSFERCALLBACKS;
     576
     577/**
     578 * Structure for thread-related members for a single URI transfer.
     579 */
     580typedef struct _SHAREDCLIPBOARDURITRANSFERTHREAD
     581{
     582    /** Thread handle for the reading / writing thread.
     583     *  Can be NIL_RTTHREAD if not being used. */
     584    RTTHREAD                    hThread;
     585    /** Thread started indicator. */
     586    volatile bool               fStarted;
     587    /** Thread cancelled flag / indicator. */
     588    volatile bool               fCancelled;
     589} SHAREDCLIPBOARDURITRANSFERTHREAD, *PSHAREDCLIPBOARDURITRANSFERTHREAD;
     590
     591/**
     592 * Structure for maintaining a single URI transfer.
     593 */
     594typedef struct _SHAREDCLIPBOARDURITRANSFER
     595{
     596    /** The node member for using this struct in a RTList. */
     597    RTLISTNODE                          Node;
     598    /** The Shared Clipboard provider in charge for this transfer. */
     599    SharedClipboardProvider            *pProvider;
     600    /** Opaque pointer to implementation-specific parameters. */
     601    void                               *pvUser;
     602    /** Size (in bytes) of implementation-specific parameters. */
     603    size_t                              cbUser;
     604    /** Contains thread-related attributes. */
     605    SHAREDCLIPBOARDURITRANSFERTHREAD    Thread;
     606} SHAREDCLIPBOARDURITRANSFER, *PSHAREDCLIPBOARDURITRANSFER;
     607
     608/**
     609 * Structure for keeping URI clipboard information around.
     610 */
     611typedef struct _SHAREDCLIPBOARDURICTX
     612{
     613    /** Critical section for serializing access. */
     614    RTCRITSECT                  CritSect;
     615    /** List of active transfers.
     616     *  Use a list or something lateron. */
     617    RTLISTANCHOR                List;
     618    /** Number of concurrent transfers.
     619     *  At the moment we only support only one transfer at a time. */
     620    uint32_t                    cTransfers;
     621} SHAREDCLIPBOARDURICTX, *PSHAREDCLIPBOARDURICTX;
     622
     623int SharedClipboardURITransferCreate(PSHAREDCLIPBOARDPROVIDERCREATIONCTX pCtx,
     624                                     PSHAREDCLIPBOARDURITRANSFER *ppTransfer);
     625void SharedClipboardURITransferDestroy(PSHAREDCLIPBOARDURITRANSFER pTransfer);
     626void SharedClipboardURITransferReset(PSHAREDCLIPBOARDURITRANSFER pTransfer);
     627int SharedClipboardURITransferWrite(PSHAREDCLIPBOARDURITRANSFER pTransfer);
     628int SharedClipboardURITransferWriteThread(RTTHREAD hThread, void *pvUser);
     629
     630int SharedClipboardURICtxInit(PSHAREDCLIPBOARDURICTX pURI, PSHAREDCLIPBOARDURITRANSFER pTransfer);
     631void SharedClipboardURICtxDestroy(PSHAREDCLIPBOARDURICTX pURI);
     632void SharedClipboardURICtxReset(PSHAREDCLIPBOARDURICTX pURI);
     633PSHAREDCLIPBOARDURITRANSFER SharedClipboardURICtxGetTransfer(PSHAREDCLIPBOARDURICTX pURI, uint32_t uIdx);
     634uint32_t SharedClipboardURICtxGetActiveTransfers(PSHAREDCLIPBOARDURICTX pURI);
     635int SharedClipboardURICtxTransferAdd(PSHAREDCLIPBOARDURICTX pURI, PSHAREDCLIPBOARDURITRANSFER pTransfer);
     636
    549637bool SharedClipboardMIMEHasFileURLs(const char *pcszFormat, size_t cchFormatMax);
    550638bool SharedClipboardMIMENeedsCache(const char *pcszFormat, size_t cchFormatMax);
  • trunk/include/VBox/GuestHost/SharedClipboard-win.h

    r78897 r78974  
    8989} VBOXCLIPBOARDWINAPIOLD, *PVBOXCLIPBOARDWINAPIOLD;
    9090
    91 #ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST
    92 class VBoxClipboardWinDataObject;
    93 
    94 /**
    95  * Structure for maintaining a single Windows URI transfer.
    96  */
    97 typedef struct _VBOXCLIPBOARDWINURITRANSFER
    98 {
    99     /** The Shared Clipboard provider in charge for this transfer. */
    100     SharedClipboardProvider    *pProvider;
    101     /** Pointer to data object to use for this transfer. */
    102     VBoxClipboardWinDataObject *pDataObj;
    103 } VBOXCLIPBOARDWINURITRANSFER, *PVBOXCLIPBOARDWINURITRANSFER;
    104 
    105 /**
    106  * Structure for keeping Windows URI clipboard information around.
    107  */
    108 typedef struct _VBOXCLIPBOARDWINURI
    109 {
    110     /** Transfer data; at the moment we only support one transfer at a time.
    111      *  Use a list or something lateron. */
    112     VBOXCLIPBOARDWINURITRANSFER Transfer;
    113     /** Number of concurrent transfers.
    114      *  At the moment we only support only one transfer at a time. */
    115     uint32_t                    cTransfers;
    116 } VBOXCLIPBOARDWINURI, *PVBOXCLIPBOARDWINURI;
    117 #endif
    118 
    11991/**
    12092 * Structure for maintaining a Shared Clipboard context on Windows platforms.
     
    12395{
    12496    /** Window handle of our (invisible) clipbaord window. */
    125     HWND                   hWnd;
     97    HWND                        hWnd;
    12698    /** Window handle which is next to us in the clipboard chain. */
    127     HWND                   hWndNextInChain;
     99    HWND                        hWndNextInChain;
    128100    /** Structure for maintaining the new clipboard API. */
    129     VBOXCLIPBOARDWINAPINEW newAPI;
     101    VBOXCLIPBOARDWINAPINEW      newAPI;
    130102    /** Structure for maintaining the old clipboard API. */
    131     VBOXCLIPBOARDWINAPIOLD oldAPI;
    132 #ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST
    133     /** Structure for keeping URI clipboard information around. */
    134     VBOXCLIPBOARDWINURI    URI;
    135 #endif
     103    VBOXCLIPBOARDWINAPIOLD      oldAPI;
    136104} VBOXCLIPBOARDWINCTX, *PVBOXCLIPBOARDWINCTX;
    137105
     
    156124int VBoxClipboardWinConvertCFHTMLToMIME(const char *pszSource, const uint32_t cch, char **ppszOutput, uint32_t *pcbOutput);
    157125int VBoxClipboardWinConvertMIMEToCFHTML(const char *pszSource, size_t cb, char **ppszOutput, uint32_t *pcbOutput);
    158 
    159 #ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST
    160 int VBoxClipboardWinURIInit(PVBOXCLIPBOARDWINURI pURI, PSHAREDCLIPBOARDPROVIDERCREATIONCTX pCtx);
    161 void VBoxClipboardWinURIDestroy(PVBOXCLIPBOARDWINURI pURI);
    162 void VBoxClipboardWinURIReset(PVBOXCLIPBOARDWINURI pURI);
    163 #endif
    164126
    165127# ifdef VBOX_WITH_SHARED_CLIPBOARD_URI_LIST
     
    191153public:
    192154
    193     VBoxClipboardWinDataObject(SharedClipboardProvider *pProvider,
     155    VBoxClipboardWinDataObject(PSHAREDCLIPBOARDURITRANSFER pTransfer,
    194156                               LPFORMATETC pFormatEtc = NULL, LPSTGMEDIUM pStgMed = NULL, ULONG cFormats = 0);
    195157    virtual ~VBoxClipboardWinDataObject(void);
     
    226188
    227189    int Init(void);
     190    void OnTransferComplete(int rc = VINF_SUCCESS);
     191    void OnTransferCanceled();
     192
     193public:
     194
    228195    static const char* ClipboardFormatToString(CLIPFORMAT fmt);
    229196
     
    241208protected:
    242209
    243     Status                   m_enmStatus;
    244     LONG                     m_lRefCount;
    245     ULONG                    m_cFormats;
    246     LPFORMATETC              m_pFormatEtc;
    247     LPSTGMEDIUM              m_pStgMedium;
    248     SharedClipboardProvider *m_pProvider;
    249     IStream                 *m_pStream;
    250     ULONG                    m_uObjIdx;
     210    Status                      m_enmStatus;
     211    LONG                        m_lRefCount;
     212    ULONG                       m_cFormats;
     213    LPFORMATETC                 m_pFormatEtc;
     214    LPSTGMEDIUM                 m_pStgMedium;
     215    PSHAREDCLIPBOARDURITRANSFER m_pTransfer;
     216    IStream                    *m_pStream;
     217    ULONG                       m_uObjIdx;
    251218};
    252219
     
    292259public:
    293260
    294     VBoxClipboardWinStreamImpl(SharedClipboardProvider *pProvider, SharedClipboardURIObject *pURIObj);
     261    VBoxClipboardWinStreamImpl(VBoxClipboardWinDataObject *pParent,
     262                               PSHAREDCLIPBOARDURITRANSFER pTransfer, SharedClipboardURIObject *pURIObj);
    295263    virtual ~VBoxClipboardWinStreamImpl(void);
    296264
     
    317285public: /* Own methods. */
    318286
    319     static HRESULT Create(SharedClipboardProvider *pProvider, SharedClipboardURIObject *pURIObj, IStream **ppStream);
     287    static HRESULT Create(VBoxClipboardWinDataObject *pParent,
     288                          PSHAREDCLIPBOARDURITRANSFER pTransfer, SharedClipboardURIObject *pURIObj, IStream **ppStream);
    320289
    321290private:
    322291
     292    /** Pointer to the parent data object. */
     293    VBoxClipboardWinDataObject *m_pParent;
    323294    /** The stream object's current reference count. */
    324     LONG                      m_lRefCount;
    325     /** Pointer to the associated Shared Clipboard provider. */
    326     SharedClipboardProvider  *m_pProvider;
     295    LONG                        m_lRefCount;
     296    /** Pointer to the associated URI transfer object. */
     297    PSHAREDCLIPBOARDURITRANSFER m_pTransfer;
    327298    /** Pointer to the associated URI object. */
    328     SharedClipboardURIObject *m_pURIObj;
     299    SharedClipboardURIObject   *m_pURIObj;
    329300};
    330301
     302/**
     303 * Class for Windows-specifics for maintaining a single URI transfer.
     304 * Set as pvUser / cbUser in SHAREDCLIPBOARDURICTX.
     305 */
     306class SharedClipboardWinURITransferCtx
     307{
     308public:
     309    SharedClipboardWinURITransferCtx()
     310        : pDataObj(NULL) { }
     311
     312    virtual ~SharedClipboardWinURITransferCtx()
     313    {
     314        if (pDataObj)
     315            delete pDataObj;
     316    }
     317
     318    /** Pointer to data object to use for this transfer.
     319     *  Can be NULL if not being used. */
     320    VBoxClipboardWinDataObject *pDataObj;
     321};
    331322# endif /* VBOX_WITH_SHARED_CLIPBOARD_URI_LIST */
    332323#endif /* !VBOX_INCLUDED_GuestHost_SharedClipboard_win_h */
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