]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/dnd.cpp
OpenGl works now under GTK
[wxWidgets.git] / src / gtk / dnd.cpp
index 8df9096096e06ab6cf4fafeb038f32e005b2de88..d34741208940cc1876cf7bb1a65bd1901efe1966 100644 (file)
 #endif
 
 #include "wx/dnd.h"
+
+#if wxUSE_DRAG_AND_DROP
+
 #include "wx/window.h"
 #include "wx/app.h"
 #include "wx/gdicmn.h"
 #include "wx/intl.h"
 #include "wx/utils.h"
 
+#include "gdk/gdk.h"
+#include "gtk/gtk.h"
 #include "gdk/gdkprivate.h"
 
 #include <X11/Xlib.h>
@@ -632,15 +637,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,10 +732,9 @@ 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;
+  static GtkWidget *drag_icon = (GtkWidget*) NULL;
+  static GtkWidget *drop_icon = (GtkWidget*) NULL;
 
   GdkPoint hotspot_1 = {0,-5 };
       
@@ -785,7 +821,7 @@ wxDragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) )
     shape_motion( drag_icon, (GdkEventMotion *)NULL );
     shape_motion( drop_icon, (GdkEventMotion *)NULL );
 */
-    
+
   while (gdk_dnd.drag_really || gdk_dnd.drag_perhaps) wxYield();
   
   UnregisterWindow();
@@ -801,7 +837,7 @@ void wxDropSource::RegisterWindow(void)
 
   wxString formats;
     
-  wxDataFormat df = m_data->GetPreferredFormat();
+  wxDataFormat df = m_data->GetFormat();
   
     switch (df) 
     {
@@ -836,7 +872,7 @@ void wxDropSource::UnregisterWindow(void)
 /*
  * Shaped Windows
  */
-static GdkWindow *root_win = NULL;
+static GdkWindow *root_win = (GdkWindow*) NULL;
 
 typedef struct _cursoroffset {gint x,y;} CursorOffset;
 
@@ -859,7 +895,8 @@ shape_pressed (GtkWidget *widget, GdkEventButton *event)
                      (GDK_BUTTON_RELEASE_MASK |
                       GDK_BUTTON_MOTION_MASK |
                       GDK_POINTER_MOTION_HINT_MASK),
-                   NULL, NULL, 0);
+                   (GdkWindow*)NULL, 
+                   (GdkCursor*) NULL, 0);
 }
 
 
@@ -953,9 +990,9 @@ shape_create_icon (char     **data,
   return window;
 }
 
-
-
-
 #endif 
        // NEW_GTK_DND_CODE
        
+#endif
+
+      // wxUSE_DRAG_AND_DROP
\ No newline at end of file