X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/155ecd4c4221d3bbc7aa93d472d11948f21d21ab..198be845897a79ba350ae7f93db536ddb2eccfb2:/src/gtk/dataobj.cpp?ds=sidebyside diff --git a/src/gtk/dataobj.cpp b/src/gtk/dataobj.cpp index 88ba70ce97..32288359f1 100644 --- a/src/gtk/dataobj.cpp +++ b/src/gtk/dataobj.cpp @@ -23,7 +23,7 @@ #include "wx/mstream.h" #include "wx/uri.h" -#include +#include "wx/gtk/private.h" //------------------------------------------------------------------------- // global data @@ -58,13 +58,7 @@ wxDataFormat::wxDataFormat( wxDataFormatId type ) SetType( type ); } -wxDataFormat::wxDataFormat( const wxChar *id ) -{ - PrepareFormats(); - SetId( id ); -} - -wxDataFormat::wxDataFormat( const wxString &id ) +void wxDataFormat::InitFromString( const wxString &id ) { PrepareFormats(); SetId( id ); @@ -110,10 +104,8 @@ wxDataFormatId wxDataFormat::GetType() const wxString wxDataFormat::GetId() const { - gchar* atom_name = gdk_atom_name( m_format ); - wxString ret = wxString::FromAscii( atom_name ); - g_free(atom_name); - return ret; + wxGtkString atom_name(gdk_atom_name(m_format)); + return wxString::FromAscii(atom_name); } void wxDataFormat::SetId( NativeFormat format ) @@ -140,12 +132,11 @@ void wxDataFormat::SetId( NativeFormat format ) m_type = wxDF_PRIVATE; } -void wxDataFormat::SetId( const wxChar *id ) +void wxDataFormat::SetId( const wxString& id ) { PrepareFormats(); m_type = wxDF_PRIVATE; - wxString tmp( id ); - m_format = gdk_atom_intern( (const char*) tmp.ToAscii(), FALSE ); + m_format = gdk_atom_intern( id.ToAscii(), FALSE ); } void wxDataFormat::PrepareFormats() @@ -281,7 +272,12 @@ bool wxFileDataObject::SetData(size_t WXUNUSED(size), const void *buf) lenPrefix += 2; } - AddFile(wxURI::Unescape(filename.c_str() + lenPrefix)); + // It would probably be nicer to use a GTK or Glib + // function to unescape the 8-bit strings pointed to + // by buf, but this does the same in wx code. + wxString filename_unicode = wxURI::Unescape(filename.c_str() + lenPrefix); + wxCharBuffer filename_8bit = filename_unicode.mb_str(wxConvISO8859_1); + AddFile(wxString(filename_8bit, *wxConvFileName)); filename.Empty(); } else if ( !filename.empty() ) @@ -298,6 +294,7 @@ bool wxFileDataObject::SetData(size_t WXUNUSED(size), const void *buf) } else { + // The string is in ISO-8859-1 according to XDND spec filename += *p; } }