X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2245b2b2c3339ecf023e5880caa803610a5d1907..2b1d737b3e9413217302cde932cbc3af91d79024:/src/gtk1/dnd.cpp diff --git a/src/gtk1/dnd.cpp b/src/gtk1/dnd.cpp index ca8a96f4b6..b8b6ecfb7f 100644 --- a/src/gtk1/dnd.cpp +++ b/src/gtk1/dnd.cpp @@ -7,12 +7,17 @@ // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "dnd.h" #endif -#include "wx/dnd.h" +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" +#include "wx/dnd.h" +#include "wx/log.h" + + #if wxUSE_DRAG_AND_DROP #include "wx/window.h" @@ -110,7 +115,7 @@ static const char * page_xpm[] = { // ============================================================================ // ---------------------------------------------------------------------------- -// convert between GTK+ and wxWindows DND constants +// convert between GTK+ and wxWidgets DND constants // ---------------------------------------------------------------------------- static wxDragResult ConvertFromGTK(long action) @@ -182,6 +187,9 @@ static gboolean target_drag_motion( GtkWidget *WXUNUSED(widget), // only good if we don't have our own preferences - but also the actions // field wxDragResult result; + if (drop_target->GetDefaultAction() == wxDragNone) + { + // use default action set by wxDropSource::DoDragDrop() if ( (gs_flagsForDrag & wxDrag_DefaultMove) == wxDrag_DefaultMove && (context->actions & GDK_ACTION_MOVE ) ) { @@ -199,6 +207,21 @@ static gboolean target_drag_motion( GtkWidget *WXUNUSED(widget), result = wxDragCopy; } } + } + else if (drop_target->GetDefaultAction() == wxDragMove && + (context->actions & GDK_ACTION_MOVE)) + { + result = wxDragMove; + } + else + { + if (context->actions & GDK_ACTION_COPY) + result = wxDragCopy; + else if (context->actions & GDK_ACTION_MOVE) + result = wxDragMove; + else + result = wxDragNone; + } if (drop_target->m_firstMotion) { @@ -301,7 +324,9 @@ static gboolean target_drag_drop( GtkWidget *widget, #endif GdkAtom format = drop_target->GetMatchingPair(); - wxASSERT( format ); + + // this does happen somehow, see bug 555111 + wxCHECK_MSG( format, FALSE, _T("no matching GdkAtom for format?") ) /* GdkDragAction action = GDK_ACTION_MOVE; @@ -364,7 +389,7 @@ static void target_drag_data_received( GtkWidget *WXUNUSED(widget), this is only valid for the duration of this call */ drop_target->SetDragData( data ); - wxDragResult result = ConvertFromGTK(context->suggested_action); + wxDragResult result = ConvertFromGTK(context->action); if ( wxIsDragResultOk( drop_target->OnData( x, y, result ) ) ) {