fix for using wxDataObjectComposite with the clipboard
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13078 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
5ece068d9f
commit
33754c4d83
@ -244,36 +244,28 @@ selection_handler( GtkWidget *WXUNUSED(widget),
|
||||
|
||||
if (!data->IsSupportedFormat( format )) return;
|
||||
|
||||
/* this will fail for composite formats */
|
||||
if (format.GetType() == wxDF_TEXT)
|
||||
{
|
||||
wxTextDataObject *text_object = (wxTextDataObject*) data;
|
||||
wxString text( text_object->GetText() );
|
||||
|
||||
#if wxUSE_UNICODE
|
||||
const wxWX2MBbuf s = text.mbc_str();
|
||||
int len = strlen(s);
|
||||
#else // more efficient in non-Unicode
|
||||
const char *s = text.c_str();
|
||||
int len = (int) text.Length();
|
||||
#endif
|
||||
gtk_selection_data_set(
|
||||
selection_data,
|
||||
GDK_SELECTION_TYPE_STRING,
|
||||
8*sizeof(gchar),
|
||||
(unsigned char*) (const char*) s,
|
||||
len );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
int size = data->GetDataSize( format );
|
||||
|
||||
if (size == 0) return;
|
||||
|
||||
char *d = new char[size];
|
||||
void *d = malloc(size);
|
||||
|
||||
data->GetDataHere( selection_data->target, (void*) d );
|
||||
data->GetDataHere( selection_data->target, d );
|
||||
|
||||
// transform Unicode text into multibyte before putting it on clipboard
|
||||
#if wxUSE_UNICODE
|
||||
if ( format.GetType() == wxDF_TEXT )
|
||||
{
|
||||
const wchar_t *wstr = (const wchar_t *)d;
|
||||
size_t len = wxConvCurrent->WC2MB(NULL, wstr, 0);
|
||||
char *str = malloc(len + 1);
|
||||
wxConvCurrent->WC2MB(str, wstr, len);
|
||||
str[len] = '\0';
|
||||
|
||||
free(d);
|
||||
d = str;
|
||||
}
|
||||
#endif // wxUSE_UNICODE
|
||||
|
||||
gtk_selection_data_set(
|
||||
selection_data,
|
||||
@ -281,6 +273,8 @@ selection_handler( GtkWidget *WXUNUSED(widget),
|
||||
8*sizeof(gchar),
|
||||
(unsigned char*) d,
|
||||
size );
|
||||
|
||||
free(d);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
@ -244,36 +244,28 @@ selection_handler( GtkWidget *WXUNUSED(widget),
|
||||
|
||||
if (!data->IsSupportedFormat( format )) return;
|
||||
|
||||
/* this will fail for composite formats */
|
||||
if (format.GetType() == wxDF_TEXT)
|
||||
{
|
||||
wxTextDataObject *text_object = (wxTextDataObject*) data;
|
||||
wxString text( text_object->GetText() );
|
||||
|
||||
#if wxUSE_UNICODE
|
||||
const wxWX2MBbuf s = text.mbc_str();
|
||||
int len = strlen(s);
|
||||
#else // more efficient in non-Unicode
|
||||
const char *s = text.c_str();
|
||||
int len = (int) text.Length();
|
||||
#endif
|
||||
gtk_selection_data_set(
|
||||
selection_data,
|
||||
GDK_SELECTION_TYPE_STRING,
|
||||
8*sizeof(gchar),
|
||||
(unsigned char*) (const char*) s,
|
||||
len );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
int size = data->GetDataSize( format );
|
||||
|
||||
if (size == 0) return;
|
||||
|
||||
char *d = new char[size];
|
||||
void *d = malloc(size);
|
||||
|
||||
data->GetDataHere( selection_data->target, (void*) d );
|
||||
data->GetDataHere( selection_data->target, d );
|
||||
|
||||
// transform Unicode text into multibyte before putting it on clipboard
|
||||
#if wxUSE_UNICODE
|
||||
if ( format.GetType() == wxDF_TEXT )
|
||||
{
|
||||
const wchar_t *wstr = (const wchar_t *)d;
|
||||
size_t len = wxConvCurrent->WC2MB(NULL, wstr, 0);
|
||||
char *str = malloc(len + 1);
|
||||
wxConvCurrent->WC2MB(str, wstr, len);
|
||||
str[len] = '\0';
|
||||
|
||||
free(d);
|
||||
d = str;
|
||||
}
|
||||
#endif // wxUSE_UNICODE
|
||||
|
||||
gtk_selection_data_set(
|
||||
selection_data,
|
||||
@ -281,6 +273,8 @@ selection_handler( GtkWidget *WXUNUSED(widget),
|
||||
8*sizeof(gchar),
|
||||
(unsigned char*) d,
|
||||
size );
|
||||
|
||||
free(d);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user