///////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
-#pragma implementation "dnd.h"
+ #pragma implementation "dnd.h"
#endif
#include "wx/dnd.h"
#include "wx/intl.h"
#include "wx/utils.h"
-#include "gdk/gdk.h"
-#include "gtk/gtk.h"
-#include "gdk/gdkprivate.h"
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkprivate.h>
-#include "gtk/gtkdnd.h"
-#include "gtk/gtkselection.h"
+#include <gtk/gtkdnd.h>
+#include <gtk/gtkselection.h>
//-----------------------------------------------------------------------------
// idle system
if (!ret)
{
- wxLogDebug( wxT( "Drop target: OnDrop returned TRUE") );
+ wxLogDebug( wxT( "Drop target: OnDrop returned FALSE") );
/* cancel the whole thing */
gtk_drag_finish( context,
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;
static void
source_drag_data_get (GtkWidget *WXUNUSED(widget),
- GdkDragContext *context,
+ GdkDragContext *WXUNUSED(context),
GtkSelectionData *selection_data,
guint WXUNUSED(info),
guint WXUNUSED(time),
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") );
#endif
delete[] d;
-
- /* so far only copy, no moves. TODO. */
- drop_source->m_retValue = wxDragCopy;
}
//----------------------------------------------------------------------------
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" );
}
//----------------------------------------------------------------------------
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" );
}
//----------------------------------------------------------------------------
{
if (g_isIdle) wxapp_install_idle_handler();
-// printf( "drag_end.\n" );
+ // printf( "Drag source: drag_end.\n" );
drop_source->m_waiting = FALSE;
}
wxDropSource::wxDropSource( wxWindow *win, const wxIcon &icon )
{
- g_blockEventsOnDrag = TRUE;
m_waiting = TRUE;
m_iconWindow = (GtkWidget*) NULL;
wxDropSource::~wxDropSource()
{
- g_blockEventsOnDrag = FALSE;
}
void wxDropSource::PrepareIcon( int hot_x, int hot_y, GdkDragContext *context )
gtk_drag_set_icon_widget( context, m_iconWindow, hot_x, hot_y );
}
-wxDragResult wxDropSource::DoDragDrop( bool WXUNUSED(bAllowMove) )
+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;
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;
event.x = x;
event.y = y;
event.state = state;
- event.time = GDK_CURRENT_TIME;
+ event.time = (guint32)GDK_CURRENT_TIME;
/* GTK wants to know which button was pressed which caused the dragging */
int button_number = 0;
/* don't start dragging if no button is down */
if (button_number)
{
+ GdkDragAction action = GDK_ACTION_COPY;
+ if (allowMove) action = (GdkDragAction)(GDK_ACTION_MOVE|GDK_ACTION_COPY);
GdkDragContext *context = gtk_drag_begin( m_widget,
target_list,
- (GdkDragAction)(GDK_ACTION_COPY|GDK_ACTION_MOVE),
+ action,
button_number, /* number of mouse button which started drag */
(GdkEvent*) &event );
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
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",
}
#endif
-
// wxUSE_DRAG_AND_DROP