]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/dnd.cpp
Now even Julian can use wxGTK :-)
[wxWidgets.git] / src / gtk1 / dnd.cpp
index e36ee810cbef2333a09ef0634815ae6f7e7c79e8..d38405ec0c72283104572f54a72c807e9f3154e7 100644 (file)
@@ -632,15 +632,47 @@ shape_motion (GtkWidget      *widget,
 
 void gtk_drag_callback( GtkWidget *widget, GdkEvent *event, wxDropSource *source )
 {
 
 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;
 }
   
   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;
   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;
   
   static GtkWidget *drag_icon = NULL;
   static GtkWidget *drop_icon = NULL;
@@ -801,7 +832,7 @@ void wxDropSource::RegisterWindow(void)
 
   wxString formats;
     
 
   wxString formats;
     
-  wxDataFormat df = m_data->GetPreferredFormat();
+  wxDataFormat df = m_data->GetFormat();
   
     switch (df) 
     {
   
     switch (df) 
     {