X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d613be55db6d1100cf38e3c9f666f7ced4db6b65..55410bb4f67febe1ca20654f078ea4fb9a6223ae:/src/gtk/dataobj.cpp diff --git a/src/gtk/dataobj.cpp b/src/gtk/dataobj.cpp index 0791e6e092..dbe0952d50 100644 --- a/src/gtk/dataobj.cpp +++ b/src/gtk/dataobj.cpp @@ -81,10 +81,13 @@ void wxDataFormat::SetType( wxDataFormatId type ) m_format = g_textAtom; else if (m_type == wxDF_TEXT) m_format = g_altTextAtom; -#else - if (m_type == wxDF_TEXT || m_type == wxDF_UNICODETEXT) +#else // !wxUSE_UNICODE + // notice that we don't map wxDF_UNICODETEXT to g_textAtom here, this + // would lead the code elsewhere to treat data objects with this format as + // containing UTF-8 data which is not true + if (m_type == wxDF_TEXT) m_format = g_textAtom; -#endif +#endif // wxUSE_UNICODE/!wxUSE_UNICODE else if (m_type == wxDF_BITMAP) m_format = g_pngAtom; @@ -143,18 +146,20 @@ void wxDataFormat::PrepareFormats() { // VZ: GNOME included in RedHat 6.1 uses the MIME types below and not the // atoms STRING and file:ALL as the old code was, but normal X apps - // use STRING for text selection when transfering the data via + // use STRING for text selection when transferring the data via // clipboard, for example, so do use STRING for now (GNOME apps will // probably support STRING as well for compatibility anyhow), but use // 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) @@ -256,7 +261,7 @@ bool wxFileDataObject::SetData(size_t WXUNUSED(size), const void *buf) // (filenames prefixed by "file:") delimited by "\r\n". size includes // the trailing zero (in theory, not for Nautilus in early GNOME // versions). - + m_filenames.Empty(); const gchar *nexttemp = (const gchar*) buf; @@ -274,7 +279,7 @@ bool wxFileDataObject::SetData(size_t WXUNUSED(size), const void *buf) nexttemp = temp+len; break; } - + return true; } if (temp[len] == '\r') @@ -287,17 +292,17 @@ bool wxFileDataObject::SetData(size_t WXUNUSED(size), const void *buf) } len++; } - + if (len == 0) break; - + // required to give it a trailing zero gchar *uri = g_strndup( temp, len ); - + gchar *fn = g_filename_from_uri( uri, NULL, NULL ); - + g_free( uri ); - + if (fn) { AddFile( wxConvFileName->cMB2WX( fn ) ); @@ -413,40 +418,40 @@ wxURLDataObject::wxURLDataObject(const wxString& url) : } size_t wxURLDataObject::GetDataSize() const -{ +{ if (m_url.empty()) return 0; - + return 2*m_url.Len()+2; } bool wxURLDataObject::GetDataHere(void *buf) const -{ +{ if (m_url.empty()) return false; - + wxCSConv conv( "UCS2" ); conv.FromWChar( (char*) buf, 2*m_url.Len()+2, m_url.wc_str() ); - + return true; } // copy data from buffer to our data bool wxURLDataObject::SetData(size_t len, const void *buf) -{ +{ if (len == 0) { m_url = wxEmptyString; return false; } - + wxCSConv conv( "UCS2" ); wxWCharBuffer res = conv.cMB2WC( (const char*) buf ); m_url = res; int pos = m_url.Find( '\n' ); if (pos != wxNOT_FOUND) m_url.Remove( pos, m_url.Len() - pos ); - + return true; }