X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/92976ab62b850005f9b1e506d0e5ccf2ed465c15..b332090aca2ae0efd37292468358c233a02eba44:/src/gtk1/dnd.cpp?ds=sidebyside diff --git a/src/gtk1/dnd.cpp b/src/gtk1/dnd.cpp index e36ee810cb..d38405ec0c 100644 --- a/src/gtk1/dnd.cpp +++ b/src/gtk1/dnd.cpp @@ -632,15 +632,47 @@ shape_motion (GtkWidget *widget, 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; } @@ -695,7 +727,6 @@ wxDragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) ) 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; @@ -801,7 +832,7 @@ void wxDropSource::RegisterWindow(void) wxString formats; - wxDataFormat df = m_data->GetPreferredFormat(); + wxDataFormat df = m_data->GetFormat(); switch (df) {