X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e0d1fd7f6e88e6554b21785dc8d7d86a8daccbb1..834c8ade287891232820e8111379cfa1c58f8828:/src/gtk/clipbrd.cpp?ds=sidebyside diff --git a/src/gtk/clipbrd.cpp b/src/gtk/clipbrd.cpp index 3e64f82515..dc2b4c4782 100644 --- a/src/gtk/clipbrd.cpp +++ b/src/gtk/clipbrd.cpp @@ -291,37 +291,39 @@ selection_handler( GtkWidget *WXUNUSED(widget), wxString::FromAscii(wxGtkString(gdk_atom_name(selection_data->selection))).c_str(), GPOINTER_TO_UINT( signal_data ) ); -#endif +#endif // __WXDEBUG__ - if (!data->IsSupportedFormat( format )) return; + if ( !data->IsSupportedFormat( format ) ) + return; int size = data->GetDataSize( format ); + if ( !size ) + return; - if (size == 0) return; - - void *d = malloc(size); - wxON_BLOCK_EXIT1(free, d); + wxCharBuffer buf(size - 1); // it adds 1 internally (for NUL) - // Text data will be in UTF8 in Unicode mode. - data->GetDataHere( selection_data->target, d ); + // text data must be returned in UTF8 if format is wxDF_UNICODETEXT + if ( !data->GetDataHere(format, buf.data()) ) + return; - // NB: GTK+ requires special treatment of UTF8_STRING data, the text - // would show as UTF-8 data interpreted as latin1 (?) in other - // GTK+ apps if we used gtk_selection_data_set() + // use UTF8_STRING format if requested in Unicode build but just plain + // STRING one in ANSI or if explicitly asked in Unicode +#if wxUSE_UNICODE if (format == wxDataFormat(wxDF_UNICODETEXT)) { gtk_selection_data_set_text( selection_data, - (const gchar*)d, + (const gchar*)buf.data(), size ); } else +#endif // wxUSE_UNICODE { gtk_selection_data_set( selection_data, GDK_SELECTION_TYPE_STRING, 8*sizeof(gchar), - (unsigned char*) d, + (const guchar*)buf.data(), size ); } }