X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e3e65dac0c4e7ad19e3c270caa1e0eea138e5d8d..93cf77c076b699e8e0b3b0049bd4f80de15997dd:/src/gtk1/dnd.cpp diff --git a/src/gtk1/dnd.cpp b/src/gtk1/dnd.cpp index 896763a93c..2498e7c423 100644 --- a/src/gtk1/dnd.cpp +++ b/src/gtk1/dnd.cpp @@ -14,6 +14,7 @@ #include "wx/window.h" #include "wx/app.h" #include "wx/gdicmn.h" +#include #include "gdk/gdkprivate.h" @@ -143,10 +144,12 @@ wxDataFormat wxFileDropTarget::GetFormat(size_t WXUNUSED(n)) const //----------------------------------------------------------------------------- // drag request -void gtk_drag_callback( GtkWidget *widget, GdkEvent *event, wxDataObject *data ) +void gtk_drag_callback( GtkWidget *widget, GdkEvent *event, wxDropSource *source ) { printf( "Data requested for dropping.\n" ); + wxDataObject *data = source->m_data; + uint size = data->GetDataSize(); char *ptr = new char[size]; data->GetDataHere( ptr ); @@ -154,6 +157,8 @@ void gtk_drag_callback( GtkWidget *widget, GdkEvent *event, wxDataObject *data ) gtk_widget_dnd_data_set( widget, event, ptr, size ); delete ptr; + + source->m_retValue = wxDropSource::Copy; }; wxDropSource::wxDropSource( wxWindow *win ) @@ -164,7 +169,8 @@ wxDropSource::wxDropSource( wxWindow *win ) m_widget = win->m_widget; if (win->m_wxwindow) m_widget = win->m_wxwindow; - m_data = NULL; + m_data = NULL; + m_retValue = Cancel; m_defaultCursor = wxCursor( wxCURSOR_NO_ENTRY ); m_goaheadCursor = wxCursor( wxCURSOR_HAND ); @@ -177,6 +183,7 @@ wxDropSource::wxDropSource( wxDataObject &data, wxWindow *win ) m_window = win; m_widget = win->m_widget; if (win->m_wxwindow) m_widget = win->m_wxwindow; + m_retValue = Cancel; m_data = &data; @@ -201,6 +208,8 @@ wxDropSource::DragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) ) if (gdk_dnd.dnd_grabbed) return None; if (gdk_dnd.drag_really) return None; + wxASSERT_MSG( data, "wxDragSource: no data" ); + if (!m_data) return None; if (m_data->GetDataSize() == 0) return None; @@ -254,7 +263,9 @@ wxDropSource::DragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) ) UnregisterWindow(); - return Copy; + g_blockEventsOnDrag = FALSE; + + return m_retValue; }; void wxDropSource::RegisterWindow(void) @@ -282,7 +293,7 @@ void wxDropSource::RegisterWindow(void) gtk_widget_dnd_drag_set( m_widget, TRUE, &str, 1 ); gtk_signal_connect( GTK_OBJECT(m_widget), "drag_request_event", - GTK_SIGNAL_FUNC(gtk_drag_callback), (gpointer)m_data ); + GTK_SIGNAL_FUNC(gtk_drag_callback), (gpointer)this ); }; void wxDropSource::UnregisterWindow(void) @@ -291,5 +302,5 @@ void wxDropSource::UnregisterWindow(void) gtk_widget_dnd_drag_set( m_widget, FALSE, NULL, 0 ); - gtk_signal_disconnect_by_data( GTK_OBJECT(m_widget), (gpointer)m_data ); + gtk_signal_disconnect_by_data( GTK_OBJECT(m_widget), (gpointer)this ); };