X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/77ffb5937e89927b621128789401db8921fe580f..db28c33ca268429840045ef81c17ee1459f4ec47:/src/gtk/dnd.cpp diff --git a/src/gtk/dnd.cpp b/src/gtk/dnd.cpp index 3eaf282f59..8fdfda9c2a 100644 --- a/src/gtk/dnd.cpp +++ b/src/gtk/dnd.cpp @@ -4,7 +4,7 @@ // Author: Robert Roebling // Id: $Id$ // Copyright: (c) 1998 Robert Roebling -// Licence: wxWidgets licence +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) @@ -139,6 +139,7 @@ static wxDragResult ConvertFromGTK(long action) // "drag_leave" // ---------------------------------------------------------------------------- +extern "C" { static void target_drag_leave( GtkWidget *WXUNUSED(widget), GdkDragContext *context, guint WXUNUSED(time), @@ -160,11 +161,13 @@ static void target_drag_leave( GtkWidget *WXUNUSED(widget), /* after this, invalidate the drop_target's GdkDragContext */ drop_target->SetDragContext( (GdkDragContext*) NULL ); } +} // ---------------------------------------------------------------------------- // "drag_motion" // ---------------------------------------------------------------------------- +extern "C" { static gboolean target_drag_motion( GtkWidget *WXUNUSED(widget), GdkDragContext *context, gint x, @@ -187,6 +190,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 ) ) { @@ -204,6 +210,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) { @@ -238,11 +259,13 @@ static gboolean target_drag_motion( GtkWidget *WXUNUSED(widget), return ret; } +} // ---------------------------------------------------------------------------- // "drag_drop" // ---------------------------------------------------------------------------- +extern "C" { static gboolean target_drag_drop( GtkWidget *widget, GdkDragContext *context, gint x, @@ -337,11 +360,13 @@ static gboolean target_drag_drop( GtkWidget *widget, return ret; } +} // ---------------------------------------------------------------------------- // "drag_data_received" // ---------------------------------------------------------------------------- +extern "C" { static void target_drag_data_received( GtkWidget *WXUNUSED(widget), GdkDragContext *context, gint x, @@ -371,7 +396,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 ) ) ) { @@ -391,6 +416,7 @@ static void target_drag_data_received( GtkWidget *WXUNUSED(widget), /* after this, invalidate the drop_target's drag data */ drop_target->SetDragData( (GtkSelectionData*) NULL ); } +} //---------------------------------------------------------------------------- // wxDropTarget @@ -543,6 +569,7 @@ void wxDropTarget::RegisterWidget( GtkWidget *widget ) // "drag_data_get" //---------------------------------------------------------------------------- +extern "C" { static void source_drag_data_get (GtkWidget *WXUNUSED(widget), GdkDragContext *WXUNUSED(context), @@ -608,11 +635,13 @@ source_drag_data_get (GtkWidget *WXUNUSED(widget), delete[] d; } +} //---------------------------------------------------------------------------- // "drag_data_delete" //---------------------------------------------------------------------------- +extern "C" { static void source_drag_data_delete( GtkWidget *WXUNUSED(widget), GdkDragContext *context, wxDropSource *WXUNUSED(drop_source) ) @@ -622,11 +651,13 @@ static void source_drag_data_delete( GtkWidget *WXUNUSED(widget), // printf( "Drag source: drag_data_delete\n" ); } +} //---------------------------------------------------------------------------- // "drag_begin" //---------------------------------------------------------------------------- +extern "C" { static void source_drag_begin( GtkWidget *WXUNUSED(widget), GdkDragContext *WXUNUSED(context), wxDropSource *WXUNUSED(drop_source) ) @@ -636,11 +667,13 @@ static void source_drag_begin( GtkWidget *WXUNUSED(widget), // printf( "Drag source: drag_begin.\n" ); } +} //---------------------------------------------------------------------------- // "drag_end" //---------------------------------------------------------------------------- +extern "C" { static void source_drag_end( GtkWidget *WXUNUSED(widget), GdkDragContext *WXUNUSED(context), wxDropSource *drop_source ) @@ -651,11 +684,13 @@ static void source_drag_end( GtkWidget *WXUNUSED(widget), drop_source->m_waiting = FALSE; } +} //----------------------------------------------------------------------------- // "configure_event" from m_iconWindow //----------------------------------------------------------------------------- +extern "C" { static gint gtk_dnd_window_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigure *WXUNUSED(event), wxDropSource *source ) { @@ -666,6 +701,7 @@ gtk_dnd_window_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigur return 0; } +} //--------------------------------------------------------------------------- // wxDropSource