X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2e5c594e36341ee6a1f000e7ccbd8537a3ec4643..ab857a4ed6687929e308ea606f65ceedc43d1319:/src/gtk1/dnd.cpp diff --git a/src/gtk1/dnd.cpp b/src/gtk1/dnd.cpp index ad29403fb1..f1b6bf43e6 100644 --- a/src/gtk1/dnd.cpp +++ b/src/gtk1/dnd.cpp @@ -21,12 +21,12 @@ #include "wx/intl.h" #include "wx/utils.h" -#include "gdk/gdk.h" -#include "gtk/gtk.h" -#include "gdk/gdkprivate.h" +#include +#include +#include -#include "gtk/gtkdnd.h" -#include "gtk/gtkselection.h" +#include +#include //----------------------------------------------------------------------------- // idle system @@ -426,20 +426,6 @@ bool wxDropTarget::GetData() if (!m_dataObject->IsSupportedFormat( dragFormat )) return FALSE; - if (dragFormat.GetType() == wxDF_TEXT) - { - wxTextDataObject *text_object = (wxTextDataObject*)m_dataObject; - text_object->SetText( (const char*)m_dragData->data ); - return TRUE; - } - - if (dragFormat.GetType() == wxDF_FILENAME) - { - wxFileDataObject *file_object = (wxFileDataObject*)m_dataObject; - file_object->SetData( 0, (const char*)m_dragData->data ); - return TRUE; - } - m_dataObject->SetData( dragFormat, (size_t)m_dragData->length, (const void*)m_dragData->data ); return TRUE; @@ -514,11 +500,11 @@ source_drag_data_get (GtkWidget *WXUNUSED(widget), wxDataFormat format( selection_data->target ); wxLogDebug( wxT("Drop source: format requested: %s"), format.GetId().c_str() ); - + drop_source->m_retValue = wxDragCancel; wxDataObject *data = drop_source->GetDataObject(); - + if (!data) { wxLogDebug( wxT("Drop source: no data object") ); @@ -566,9 +552,6 @@ source_drag_data_get (GtkWidget *WXUNUSED(widget), #endif delete[] d; - - /* so far only copy, no moves. TODO. */ - drop_source->m_retValue = wxDragCopy; } //---------------------------------------------------------------------------- @@ -577,13 +560,12 @@ source_drag_data_get (GtkWidget *WXUNUSED(widget), static void source_drag_data_delete( GtkWidget *WXUNUSED(widget), GdkDragContext *WXUNUSED(context), - wxDropSource *drop_source ) + wxDropSource *WXUNUSED(drop_source) ) { - if (g_isIdle) wxapp_install_idle_handler(); - -// printf( "Delete the data!\n" ); + if (g_isIdle) + wxapp_install_idle_handler(); - drop_source->m_retValue = wxDragMove; + // printf( "Drag source: drag_data_delete\n" ); } //---------------------------------------------------------------------------- @@ -594,9 +576,10 @@ static void source_drag_begin( GtkWidget *WXUNUSED(widget), GdkDragContext *WXUNUSED(context), wxDropSource *WXUNUSED(drop_source) ) { - if (g_isIdle) wxapp_install_idle_handler(); + if (g_isIdle) + wxapp_install_idle_handler(); -// printf( "drag_begin.\n" ); + // printf( "Drag source: drag_begin.\n" ); } //---------------------------------------------------------------------------- @@ -609,7 +592,7 @@ static void source_drag_end( GtkWidget *WXUNUSED(widget), { if (g_isIdle) wxapp_install_idle_handler(); -// printf( "drag_end.\n" ); + // printf( "Drag source: drag_end.\n" ); drop_source->m_waiting = FALSE; } @@ -639,7 +622,6 @@ gtk_dnd_window_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigur wxDropSource::wxDropSource( wxWindow *win, const wxIcon &icon ) { - g_blockEventsOnDrag = TRUE; m_waiting = TRUE; m_iconWindow = (GtkWidget*) NULL; @@ -674,7 +656,6 @@ wxDropSource::wxDropSource( wxDataObject& data, wxWindow *win, const wxIcon &ico wxDropSource::~wxDropSource() { - g_blockEventsOnDrag = FALSE; } void wxDropSource::PrepareIcon( int hot_x, int hot_y, GdkDragContext *context ) @@ -713,7 +694,7 @@ void wxDropSource::PrepareIcon( int hot_x, int hot_y, GdkDragContext *context ) wxDragResult wxDropSource::DoDragDrop( bool allowMove ) { - wxASSERT_MSG( m_data, wxT("wxDragSource: no data") ); + wxASSERT_MSG( m_data, wxT("Drop source: no data") ); if (!m_data) return (wxDragResult) wxDragNone; @@ -734,7 +715,7 @@ wxDragResult wxDropSource::DoDragDrop( bool allowMove ) for (size_t i = 0; i < m_data->GetFormatCount(); i++) { GdkAtom atom = array[i]; - wxLogDebug( wxT("Supported atom %s"), gdk_atom_name( atom ) ); + wxLogDebug( wxT("Drop source: Supported atom %s"), gdk_atom_name( atom ) ); gtk_target_list_add( target_list, atom, 0, 0 ); } delete[] array; @@ -776,7 +757,12 @@ wxDragResult wxDropSource::DoDragDrop( bool allowMove ) PrepareIcon( 0, 0, context ); - while (m_waiting) gtk_main_iteration();; + while (m_waiting) gtk_main_iteration(); + + if (context->action == GDK_ACTION_COPY) + m_retValue = wxDragCopy; + if (context->action == GDK_ACTION_MOVE) + m_retValue = wxDragMove; } #if wxUSE_THREADS @@ -794,7 +780,7 @@ wxDragResult wxDropSource::DoDragDrop( bool allowMove ) void wxDropSource::RegisterWindow() { if (!m_widget) return; - + gtk_signal_connect( GTK_OBJECT(m_widget), "drag_data_get", GTK_SIGNAL_FUNC (source_drag_data_get), (gpointer) this); gtk_signal_connect (GTK_OBJECT(m_widget), "drag_data_delete", @@ -821,5 +807,4 @@ void wxDropSource::UnregisterWindow() } #endif - // wxUSE_DRAG_AND_DROP