extern void wxapp_install_idle_handler();
extern bool g_isIdle;
+//-----------------------------------------------------------------------------
+// thread system
+//-----------------------------------------------------------------------------
+
+#if wxUSE_THREADS
+extern void wxapp_install_thread_wakeup();
+extern void wxapp_uninstall_thread_wakeup();
+#endif
+
//----------------------------------------------------------------------------
// global data
//----------------------------------------------------------------------------
{
}
-bool wxDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{
return TRUE;
}
-bool wxDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) )
{
return FALSE;
}
-bool wxDropTarget::OnData( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxDropTarget::OnData( long WXUNUSED(x), long WXUNUSED(y) )
{
return FALSE;
}
if (format.GetType() == wxDF_TEXT) wxPrintf( _T("text data.\n") );
*/
+#if wxUSE_THREADS
+ /* disable GUI threads */
+ wxapp_uninstall_thread_wakeup();
+#endif
+
/* this should trigger an "drag_data_received" event */
gtk_drag_get_data( m_dragWidget,
m_dragContext,
format.GetAtom(),
m_dragTime );
+#if wxUSE_THREADS
+ /* re-enable GUI threads */
+ wxapp_install_thread_wakeup();
+#endif
+
return TRUE;
}
// wxTextDropTarget
//-------------------------------------------------------------------------
-bool wxTextDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxTextDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{
return IsSupported( wxDF_TEXT );
}
-bool wxTextDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxTextDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) )
{
if (IsSupported( wxDF_TEXT ))
{
return FALSE;
}
-bool wxTextDropTarget::OnData( int x, int y )
+bool wxTextDropTarget::OnData( long x, long y )
{
wxTextDataObject data;
if (!GetData( &data )) return FALSE;
m_id = id;
}
-bool wxPrivateDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxPrivateDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{
return IsSupported( m_id );
}
-bool wxPrivateDropTarget::OnDrop( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxPrivateDropTarget::OnDrop( long WXUNUSED(x), long WXUNUSED(y) )
{
if (!IsSupported( m_id ))
{
return FALSE;
}
-bool wxPrivateDropTarget::OnData( int x, int y )
+bool wxPrivateDropTarget::OnData( long x, long y )
{
if (!IsSupported( m_id )) return FALSE;
// A drop target which accepts files (dragged from File Manager or Explorer)
//----------------------------------------------------------------------------
-bool wxFileDropTarget::OnMove( int WXUNUSED(x), int WXUNUSED(y) )
+bool wxFileDropTarget::OnMove( long WXUNUSED(x), long WXUNUSED(y) )
{
return IsSupported( wxDF_FILENAME );
}
-bool wxFileDropTarget::OnDrop( int x, int y )
+bool wxFileDropTarget::OnDrop( long x, long y )
{
if (IsSupported( wxDF_FILENAME ))
{
return FALSE;
}
-bool wxFileDropTarget::OnData( int x, int y )
+bool wxFileDropTarget::OnData( long x, long y )
{
wxFileDataObject data;
if (!GetData( &data )) return FALSE;
wxDataObject *data_object = (wxDataObject*) node->Data();
if (data_object->GetFormat().GetAtom() == selection_data->target)
{
-// printf( "format found.\n" );
+// printf( "format found.\n" );
size_t data_size = data_object->GetSize();
if (data_size > 0)
{
-// printf( "data size: %d.\n", (int)data_size );
+// printf( "data size: %d.\n", (int)data_size );
guchar *buffer = new guchar[data_size];
data_object->WriteData( buffer );
+#if wxUSE_THREADS
+ /* disable GUI threads */
+ wxapp_uninstall_thread_wakeup();
+#endif
+
gtk_selection_data_set( selection_data,
selection_data->target,
8, // 8-bit
buffer,
data_size );
+#if wxUSE_THREADS
+ /* enable GUI threads */
+ wxapp_install_thread_wakeup();
+#endif
free( buffer );
/* so far only copy, no moves. TODO. */
{
if (g_isIdle) wxapp_install_idle_handler();
-// printf( "Delete the data!\n" );
+// printf( "Delete the data!\n" );
drop_source->m_retValue = wxDragMove;
}
{
if (g_isIdle) wxapp_install_idle_handler();
-// printf( "drag_begin.\n" );
+// printf( "drag_begin.\n" );
}
//----------------------------------------------------------------------------
{
if (g_isIdle) wxapp_install_idle_handler();
-// printf( "drag_end.\n" );
+// printf( "drag_end.\n" );
drop_source->m_waiting = FALSE;
}
m_waiting = TRUE;
GdkAtom atom = gdk_atom_intern( "STRING", FALSE );
-// wxPrintf( _T("atom id: %d.\n"), (int)atom );
+// printf( "atom id: %d.\n", (int)atom );
GtkTargetList *target_list = gtk_target_list_new( (GtkTargetEntry*) NULL, 0 );
gtk_target_list_add( target_list, atom, 0, 0 );
else if (event.state & GDK_BUTTON2_MASK) button_number = 2;
else if (event.state & GDK_BUTTON3_MASK) button_number = 3;
+#if wxUSE_THREADS
+ /* disable GUI threads */
+ wxapp_uninstall_thread_wakeup();
+#endif
+
/* don't start dragging if no button is down */
if (button_number)
{
while (m_waiting) gtk_main_iteration();;
}
+#if wxUSE_THREADS
+ /* re-enable GUI threads */
+ wxapp_install_thread_wakeup();
+#endif
+
g_blockEventsOnDrag = FALSE;
UnregisterWindow();