X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bd3b7e098d6545688eeee0fedd04346173493875..ae177b45b258b4985ee8c9ce7848bcb4f1266f80:/src/gtk1/dataobj.cpp diff --git a/src/gtk1/dataobj.cpp b/src/gtk1/dataobj.cpp index cae5a43dfb..0602e78037 100644 --- a/src/gtk1/dataobj.cpp +++ b/src/gtk1/dataobj.cpp @@ -7,15 +7,19 @@ // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "dataobj.h" #endif +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + #include "wx/dataobj.h" #include "wx/app.h" #include "wx/debug.h" #include "wx/mstream.h" #include "wx/image.h" +#include "wx/log.h" #include @@ -24,6 +28,7 @@ //------------------------------------------------------------------------- GdkAtom g_textAtom = 0; +GdkAtom g_altTextAtom = 0; GdkAtom g_pngAtom = 0; GdkAtom g_fileAtom = 0; @@ -72,10 +77,18 @@ wxDataFormat::wxDataFormat( NativeFormat format ) void wxDataFormat::SetType( wxDataFormatId type ) { PrepareFormats(); + m_type = type; - - if (m_type == wxDF_TEXT) + +#if wxUSE_UNICODE + if (m_type == wxDF_UNICODETEXT) + m_format = g_textAtom; + else if (m_type == wxDF_TEXT) + m_format = g_altTextAtom; +#else + if (m_type == wxDF_TEXT || m_type == wxDF_UNICODETEXT) m_format = g_textAtom; +#endif else if (m_type == wxDF_BITMAP) m_format = g_pngAtom; @@ -95,7 +108,7 @@ wxDataFormatId wxDataFormat::GetType() const wxString wxDataFormat::GetId() const { - wxString ret( gdk_atom_name( m_format ) ); // this will convert from ascii to Unicode + wxString ret = wxString::FromAscii( gdk_atom_name( m_format ) ); return ret; } @@ -105,6 +118,13 @@ void wxDataFormat::SetId( NativeFormat format ) m_format = format; if (m_format == g_textAtom) +#if wxUSE_UNICODE + m_type = wxDF_UNICODETEXT; +#else + m_type = wxDF_TEXT; +#endif + else + if (m_format == g_altTextAtom) m_type = wxDF_TEXT; else if (m_format == g_pngAtom) @@ -121,7 +141,7 @@ void wxDataFormat::SetId( const wxChar *id ) PrepareFormats(); m_type = wxDF_PRIVATE; wxString tmp( id ); - m_format = gdk_atom_intern( wxMBSTRINGCAST tmp.mbc_str(), FALSE ); // what is the string cast for? + m_format = gdk_atom_intern( (const char*) tmp.ToAscii(), FALSE ); } void wxDataFormat::PrepareFormats() @@ -134,7 +154,12 @@ void wxDataFormat::PrepareFormats() // text/uri-list for file dnd because compatibility is not important // here (with whom?) if (!g_textAtom) +#if wxUSE_UNICODE + g_textAtom = gdk_atom_intern( "UTF8_STRING", FALSE ); + g_altTextAtom = gdk_atom_intern( "STRING", FALSE ); +#else g_textAtom = gdk_atom_intern( "STRING" /* "text/plain" */, FALSE ); +#endif if (!g_pngAtom) g_pngAtom = gdk_atom_intern( "image/png", FALSE ); if (!g_fileAtom) @@ -149,6 +174,11 @@ wxDataObject::wxDataObject() { } +wxDataObject::~wxDataObject() +{ + // dtor is empty but needed for Darwin and AIX -- otherwise it doesn't link +} + bool wxDataObject::IsSupportedFormat(const wxDataFormat& format, Direction dir) const { size_t nFormatCount = GetFormatCount(dir); @@ -175,6 +205,18 @@ bool wxDataObject::IsSupportedFormat(const wxDataFormat& format, Direction dir) } } +// ---------------------------------------------------------------------------- +// wxTextDataObject +// ---------------------------------------------------------------------------- + +#if defined(__WXGTK20__) && wxUSE_UNICODE +void wxTextDataObject::GetAllFormats(wxDataFormat *formats, wxDataObjectBase::Direction dir) const +{ + *formats++ = GetPreferredFormat(); + *formats = g_altTextAtom; +} +#endif + // ---------------------------------------------------------------------------- // wxFileDataObject // ---------------------------------------------------------------------------- @@ -185,8 +227,9 @@ bool wxFileDataObject::GetDataHere(void *buf) const for (size_t i = 0; i < m_filenames.GetCount(); i++) { + filenames += wxT("file:"); filenames += m_filenames[i]; - filenames += (wxChar) 0; + filenames += wxT("\r\n"); } memcpy( buf, filenames.mbc_str(), filenames.Len() + 1 ); @@ -200,8 +243,9 @@ size_t wxFileDataObject::GetDataSize() const for (size_t i = 0; i < m_filenames.GetCount(); i++) { + // This is junk in UTF-8 res += m_filenames[i].Len(); - res += 1; + res += 5 + 2; // "file:" (5) + "\r\n" (2) } return res + 1; @@ -358,7 +402,7 @@ void wxBitmapDataObject::DoConvertToPng() wxCHECK_RET( wxImage::FindHandler(wxBITMAP_TYPE_PNG) != NULL, wxT("You must call wxImage::AddHandler(new wxPNGHandler); to be able to use clipboard with bitmaps!") ); - wxImage image(m_bitmap); + wxImage image = m_bitmap.ConvertToImage(); wxCountingOutputStream count; image.SaveFile(count, wxBITMAP_TYPE_PNG);