X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0416c41834f36316a03720c4ed05cdf36964a2f3..fd90675b89c7f0b8fb9c6749f8314a26e23b1b95:/include/wx/gtk/clipbrd.h diff --git a/include/wx/gtk/clipbrd.h b/include/wx/gtk/clipbrd.h index c831e3cc18..548e911743 100644 --- a/include/wx/gtk/clipbrd.h +++ b/include/wx/gtk/clipbrd.h @@ -1,9 +1,10 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: clipboard.h -// Purpose: -// Author: Robert Roebling +// Name: wx/gtk/clipboard.h +// Purpose: wxClipboard for wxGTK +// Author: Robert Roebling, Vadim Zeitlin // Id: $Id$ // Copyright: (c) 1998 Robert Roebling +// (c) 2007 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -14,11 +15,20 @@ // wxClipboard // ---------------------------------------------------------------------------- +#include "wx/weakref.h" + class WXDLLIMPEXP_CORE wxClipboard : public wxClipboardBase { public: + // there are several clipboards in X11 (and in GDK) + enum Kind + { + Primary, + Clipboard + }; + wxClipboard(); - ~wxClipboard(); + virtual ~wxClipboard(); // open the clipboard before SetData() and GetData() virtual bool Open(); @@ -38,33 +48,85 @@ public: // ask if data in correct format is available virtual bool IsSupported( const wxDataFormat& format ); + // ask if data in correct format is available + virtual bool IsSupportedAsync( wxEvtHandler *sink ); + // fill data with data on the clipboard (if available) virtual bool GetData( wxDataObject& data ); // clears wxTheClipboard and the system's clipboard if possible virtual void Clear(); - // If primary == TRUE, use primary selection in all further ops, - // primary == FALSE resets it. - virtual void UsePrimarySelection(bool primary = TRUE) - { m_usePrimary = primary; } - + + // implementation from now on - bool m_open; - bool m_ownsClipboard; - bool m_ownsPrimarySelection; - wxDataObject *m_data; + // -------------------------- + + // get our clipboard item (depending on m_usePrimary value) + GdkAtom GTKGetClipboardAtom() const; + + // get the data object currently being used + wxDataObject *GTKGetDataObject() { return Data(); } + + // clear the data for the given clipboard kind + void GTKClearData(Kind kind); + + // called when selection data is received + void GTKOnSelectionReceived(const GtkSelectionData& sel); + + // called when available target information is received + bool GTKOnTargetReceived(const wxDataFormat& format); + +private: + // the data object for the specific selection + wxDataObject *& Data(Kind kind) + { + return kind == Primary ? m_dataPrimary : m_dataClipboard; + } + + // the data object we're currently using + wxDataObject *& Data() + { + return Data(m_usePrimary ? Primary : Clipboard); + } + + + // set or unset selection ownership + bool SetSelectionOwner(bool set = true); + + // add atom to the list of supported targets + void AddSupportedTarget(GdkAtom atom); + + // check if the given format is supported + bool DoIsSupported(const wxDataFormat& format); - GtkWidget *m_clipboardWidget; /* for getting and offering data */ - GtkWidget *m_targetsWidget; /* for getting list of supported formats */ - bool m_waiting; /* querying data or formats is asynchronous */ - bool m_formatSupported; - GdkAtom m_targetRequested; - bool m_usePrimary; - wxDataObject *m_receivedData; + // both of these pointers can be non-NULL simultaneously but we only use + // one of them at any moment depending on m_usePrimary value, use Data() + // (from inside) or GTKGetDataObject() (from outside) accessors + wxDataObject *m_dataPrimary, + *m_dataClipboard; + // this is used to temporarily hold the object passed to our GetData() so + // that GTK callbacks could access it + wxDataObject *m_receivedData; + + // used to pass information about the format we need from DoIsSupported() + // to GTKOnTargetReceived() + GdkAtom m_targetRequested; + + GtkWidget *m_clipboardWidget; // for getting and offering data + GtkWidget *m_targetsWidget; // for getting list of supported formats + + bool m_open; + bool m_formatSupported; + +public: + // async stuff + wxEvtHandlerRef m_sink; private: + GtkWidget *m_targetsWidgetAsync; // for getting list of supported formats + DECLARE_DYNAMIC_CLASS(wxClipboard) };