X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/92976ab62b850005f9b1e506d0e5ccf2ed465c15..aae24d21a33faa2a23fccde24255365ca845c46f:/src/gtk/dnd.cpp diff --git a/src/gtk/dnd.cpp b/src/gtk/dnd.cpp index e36ee810cb..d347412089 100644 --- a/src/gtk/dnd.cpp +++ b/src/gtk/dnd.cpp @@ -12,12 +12,17 @@ #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 @@ -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 }; @@ -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