From: Stefan Csomor Date: Thu, 23 Mar 2006 18:16:02 +0000 (+0000) Subject: implementation streamlined X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/d7b284e5c62523c9a43e26977672b4ff7c5b8981?ds=inline implementation streamlined git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38314 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/mac/carbon/dataobj.cpp b/src/mac/carbon/dataobj.cpp index c7d0d610a3..5de37f5e06 100644 --- a/src/mac/carbon/dataobj.cpp +++ b/src/mac/carbon/dataobj.cpp @@ -24,6 +24,9 @@ #include "wx/mstream.h" #include "wx/image.h" #include "wx/metafile.h" +#include "wx/tokenzr.h" + + #include "wx/mac/private.h" #ifndef __DARWIN__ @@ -202,46 +205,51 @@ void wxTextDataObject::GetAllFormats( wxDataFormat *formats, wxDataObjectBase::D // wxFileDataObject // ---------------------------------------------------------------------------- +void wxFileDataObject::GetFileNames(wxCharBuffer &buf) const +{ + wxString filenames; + + for (size_t i = 0; i < m_filenames.GetCount(); i++) + { + filenames += m_filenames[i]; + filenames += wxT('\n'); + } + + buf = filenames.fn_str(); +} + bool wxFileDataObject::GetDataHere( void *pBuf ) const { if (pBuf == NULL) return false; - wxString sFilenames; + wxCharBuffer buf; + GetFileNames( buf ); - for (size_t i = 0; i < m_filenames.GetCount(); i++) - { - sFilenames += m_filenames[i]; - sFilenames += (wxChar)0; - } - - memcpy( pBuf, sFilenames.mbc_str(), sFilenames.Len() + 1 ); + memcpy( pBuf, (const char*) buf, strlen(buf) + 1 ); return true; } size_t wxFileDataObject::GetDataSize() const { - size_t nRes = 0; + wxCharBuffer buf; + GetFileNames( buf ); - for (size_t i = 0; i < m_filenames.GetCount(); i++) - { - nRes += m_filenames[i].Len(); - nRes += 1; - } - - return nRes + 1; + return strlen(buf) + 1; } -bool wxFileDataObject::SetData( size_t WXUNUSED(nSize), const void *pBuf ) +bool wxFileDataObject::SetData( size_t nSize, const void *pBuf ) { - m_filenames.Empty(); - - // only add if this is not an empty string - // we can therefore clear the list by just setting an empty string - if ((*(const char*)pBuf) != 0) - AddFile( wxString::FromAscii( (char*)pBuf) ); + wxString filenames; +#if wxUSE_UNICODE + filenames = wxString( (const char*) pBuf , *wxConvFileName ); +#else + filenames = wxString( wxConvFileName->cMB2WX( pBuf ) , wxConvLocal ); +#endif + m_filenames = wxStringTokenize( filenames , wxT("\n") , wxTOKEN_STRTOK ); + return true; }