X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8907154c1a8a6882c6797d1f16393ddfb23e7f3a..c753eb9269d1e6c99b80a2d782ce49d9864ac1da:/src/common/clipcmn.cpp diff --git a/src/common/clipcmn.cpp b/src/common/clipcmn.cpp index 6f380b5aae..133c18967a 100644 --- a/src/common/clipcmn.cpp +++ b/src/common/clipcmn.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: common/clipcmn.cpp +// Name: src/common/clipcmn.cpp // Purpose: common (to all ports) wxClipboard functions // Author: Robert Roebling // Modified by: @@ -24,10 +24,69 @@ #pragma hdrstop #endif +#if wxUSE_CLIPBOARD + #include "wx/clipbrd.h" -#include "wx/module.h" -#if wxUSE_CLIPBOARD +#ifndef WX_PRECOMP + #include "wx/dataobj.h" + #include "wx/module.h" +#endif + +// --------------------------------------------------------- +// wxClipboardEvent +// --------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxClipboardEvent,wxEvent) + +wxDEFINE_EVENT( wxEVT_CLIPBOARD_CHANGED, wxClipboardEvent ); + +// notice that ctors are defined here and not inline to avoid having to include +// wx/dataobj.h from wx/clipbrd.h +wxClipboardEvent::wxClipboardEvent(wxEventType evtType) + : wxEvent(0, evtType) +{ +} + +wxClipboardEvent::wxClipboardEvent(const wxClipboardEvent& event) + : wxEvent(event), + m_formats(event.m_formats) +{ +} + +wxEvent* wxClipboardEvent::Clone() const +{ + return new wxClipboardEvent(*this); +} + +bool wxClipboardEvent::SupportsFormat( const wxDataFormat &format ) const +{ +#ifdef __WXGTK20__ + // GTK has an asynchronous API which reports the supported formats one by + // one. We may have to add X11 and Motif later. + 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 +} + +void wxClipboardEvent::AddFormat(const wxDataFormat& format) +{ + m_formats.push_back( format ); +} + +// --------------------------------------------------------- +// wxClipboardBase +// --------------------------------------------------------- static wxClipboard *gs_clipboard = NULL; @@ -40,6 +99,19 @@ static wxClipboard *gs_clipboard = NULL; return gs_clipboard; } +bool wxClipboardBase::IsSupportedAsync( wxEvtHandler *sink ) +{ + // 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; +} + + // ---------------------------------------------------------------------------- // wxClipboardModule: module responsible for destroying the global clipboard // object