X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c7d94ca4f9246b9d0b9b6772adbea8bcb17fc076..caa2490c0fb8053b1d416117a9619695d75af9e4:/src/gtk1/dnd.cpp diff --git a/src/gtk1/dnd.cpp b/src/gtk1/dnd.cpp index 02701c7a54..8fdfda9c2a 100644 --- a/src/gtk1/dnd.cpp +++ b/src/gtk1/dnd.cpp @@ -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) { @@ -220,9 +241,7 @@ static gboolean target_drag_motion( GtkWidget *WXUNUSED(widget), if (ret) { GdkDragAction action; - if ((result == wxDragCopy) && (context->actions & GDK_ACTION_COPY) || - (result == wxDragMove) && !(context->actions & GDK_ACTION_MOVE) || - (result == wxDragLink) && !(context->actions & GDK_ACTION_LINK)) + if (result == wxDragCopy) action = GDK_ACTION_COPY; else if (result == wxDragLink) action = GDK_ACTION_LINK; @@ -240,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, @@ -339,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, @@ -393,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 @@ -545,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), @@ -610,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) ) @@ -624,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) ) @@ -638,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 ) @@ -653,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 ) { @@ -668,6 +701,7 @@ gtk_dnd_window_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigur return 0; } +} //--------------------------------------------------------------------------- // wxDropSource