void gtk_drag_callback( GtkWidget *widget, GdkEvent *event, wxDropSource *source )
{
- wxDataObject *data = source->m_data;
-
- size_t size = data->GetDataSize();
- char *ptr = new char[size];
- data->GetDataHere( ptr );
-
- gtk_widget_dnd_data_set( widget, event, ptr, size );
-
- delete ptr;
+ wxDataObject *data = source->m_data;
+
+ switch (data->GetFormat())
+ {
+ case wxDF_TEXT:
+ {
+ wxTextDataObject *text_object = (wxTextDataObject*) data;
+
+ wxString text = text_object->GetText();
+
+ char *s = WXSTRINGCAST text;
+
+ gtk_widget_dnd_data_set( widget,
+ event,
+ (unsigned char*) s,
+ (int) text.Length()+1 );
+
+ break;
+ }
+
+ case wxDF_FILENAME:
+ {
+ wxFileDataObject *file_object = (wxFileDataObject*) data;
+
+ wxString text = file_object->GetFiles();
+
+ char *s = WXSTRINGCAST text;
+
+ gtk_widget_dnd_data_set( widget,
+ event,
+ (unsigned char*) s,
+ (int) text.Length()+1 );
+
+ break;
+ }
+
+ default:
+ {
+ return;
+ }
+ }
source->m_retValue = wxDragCopy;
}
wxASSERT_MSG( m_data, "wxDragSource: no data" );
if (!m_data) return (wxDragResult) wxDragNone;
- if (m_data->GetDataSize() == 0) return (wxDragResult) wxDragNone;
static GtkWidget *drag_icon = NULL;
static GtkWidget *drop_icon = NULL;
wxString formats;
- wxDataFormat df = m_data->GetPreferredFormat();
+ wxDataFormat df = m_data->GetFormat();
switch (df)
{