X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d613be55db6d1100cf38e3c9f666f7ced4db6b65..7d6a4d96961eac84d05db8bb24c64d39003f6e54:/src/gtk/dataobj.cpp?ds=sidebyside diff --git a/src/gtk/dataobj.cpp b/src/gtk/dataobj.cpp index 0791e6e092..c742b77f15 100644 --- a/src/gtk/dataobj.cpp +++ b/src/gtk/dataobj.cpp @@ -33,6 +33,7 @@ GdkAtom g_textAtom = 0; GdkAtom g_altTextAtom = 0; GdkAtom g_pngAtom = 0; GdkAtom g_fileAtom = 0; +GdkAtom g_htmlAtom = 0; //------------------------------------------------------------------------- // wxDataFormat @@ -81,10 +82,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; @@ -92,6 +96,9 @@ void wxDataFormat::SetType( wxDataFormatId type ) if (m_type == wxDF_FILENAME) m_format = g_fileAtom; else + if (m_type == wxDF_HTML) + m_format = g_htmlAtom; + else { wxFAIL_MSG( wxT("invalid dataformat") ); } @@ -128,6 +135,9 @@ void wxDataFormat::SetId( NativeFormat format ) else if (m_format == g_fileAtom) m_type = wxDF_FILENAME; + else + if (m_format == g_htmlAtom) + m_type = wxDF_HTML; else m_type = wxDF_PRIVATE; } @@ -143,22 +153,26 @@ 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) g_fileAtom = gdk_atom_intern( "text/uri-list", FALSE ); + if (!g_htmlAtom) + g_htmlAtom = gdk_atom_intern( "text/html", FALSE ); } //------------------------------------------------------------------------- @@ -256,7 +270,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 +288,7 @@ bool wxFileDataObject::SetData(size_t WXUNUSED(size), const void *buf) nexttemp = temp+len; break; } - + return true; } if (temp[len] == '\r') @@ -287,17 +301,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 ) ); @@ -379,12 +393,12 @@ bool wxBitmapDataObject::SetData(size_t size, const void *buf) m_bitmap = wxBitmap(image); - return m_bitmap.Ok(); + return m_bitmap.IsOk(); } void wxBitmapDataObject::DoConvertToPng() { - if ( !m_bitmap.Ok() ) + if ( !m_bitmap.IsOk() ) return; wxCHECK_RET( wxImage::FindHandler(wxBITMAP_TYPE_PNG) != NULL, @@ -413,40 +427,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; }