X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8ee9d6182c9b7774477e97f4326766ac05cc70c2..538a2cfaf2be9f864e58c9a9fe232966af6bf2a0:/src/common/clipcmn.cpp diff --git a/src/common/clipcmn.cpp b/src/common/clipcmn.cpp index 85fbacce04..2781a967d7 100644 --- a/src/common/clipcmn.cpp +++ b/src/common/clipcmn.cpp @@ -1,12 +1,12 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: common/clipcmn.cpp +// Name: src/common/clipcmn.cpp // Purpose: common (to all ports) wxClipboard functions // Author: Robert Roebling // Modified by: // Created: 28.06.99 // RCS-ID: $Id$ // Copyright: (c) Robert Roebling -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "clipboardbase.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -28,50 +24,89 @@ #pragma hdrstop #endif +#if wxUSE_CLIPBOARD + #include "wx/clipbrd.h" -#include "wx/module.h" -// ---------------------------------------------------------------------------- -// wxClipboardModule: module responsible for initializing the global clipboard -// object -// ---------------------------------------------------------------------------- +#ifndef WX_PRECOMP + #include "wx/dataobj.h" + #include "wx/module.h" +#endif -class wxClipboardModule : public wxModule -{ -public: - bool OnInit(); - void OnExit(); +// --------------------------------------------------------- +// wxClipboardEvent +// --------------------------------------------------------- -private: - DECLARE_DYNAMIC_CLASS(wxClipboardModule) -}; +IMPLEMENT_DYNAMIC_CLASS(wxClipboardEvent,wxEvent) -// ---------------------------------------------------------------------------- -// global data defined here -// ---------------------------------------------------------------------------- +wxDEFINE_EVENT( wxEVT_CLIPBOARD_CHANGED, wxClipboardEvent ); -IMPLEMENT_DYNAMIC_CLASS(wxClipboardModule, wxModule) +bool wxClipboardEvent::SupportsFormat( const wxDataFormat &format ) const +{ +#ifdef __WXGTK20__ + for (wxVector::size_type n = 0; n < m_formats.size(); n++) + { + if (m_formats[n] == format) + return true; + } + + return false; +#else + // All other ports just query the clipboard directly + // from here + wxClipboard* clipboard = (wxClipboard*) GetEventObject(); + return clipboard->IsSupported( format ); +#endif +} -wxClipboard* wxTheClipboard = (wxClipboard *)NULL; +void wxClipboardEvent::AddFormat(const wxDataFormat& format) +{ + m_formats.push_back( format ); +} -// ---------------------------------------------------------------------------- -// implementation -// ---------------------------------------------------------------------------- +// --------------------------------------------------------- +// wxClipboardBase +// --------------------------------------------------------- -wxClipboardBase::wxClipboardBase() +static wxClipboard *gs_clipboard = NULL; + +/*static*/ wxClipboard *wxClipboardBase::Get() { + if ( !gs_clipboard ) + { + gs_clipboard = new wxClipboard; + } + return gs_clipboard; } -bool wxClipboardModule::OnInit() +bool wxClipboardBase::IsSupportedAsync( wxEvtHandler *sink ) { - wxTheClipboard = new wxClipboard; + // We just imitate an asynchronous API on most platforms. + // This method is overridden uner GTK. + wxClipboardEvent *event = new wxClipboardEvent(wxEVT_CLIPBOARD_CHANGED); + event->SetEventObject( this ); + + sink->QueueEvent( event ); - return TRUE; + return true; } -void wxClipboardModule::OnExit() + +// ---------------------------------------------------------------------------- +// wxClipboardModule: module responsible for destroying the global clipboard +// object +// ---------------------------------------------------------------------------- + +class wxClipboardModule : public wxModule { - delete wxTheClipboard; +public: + bool OnInit() { return true; } + void OnExit() { wxDELETE(gs_clipboard); } - wxTheClipboard = (wxClipboard *)NULL; -} +private: + DECLARE_DYNAMIC_CLASS(wxClipboardModule) +}; + +IMPLEMENT_DYNAMIC_CLASS(wxClipboardModule, wxModule) + +#endif // wxUSE_CLIPBOARD