git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43757
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
// the flags used for the last DoDragDrop()
static long gs_flagsForDrag = 0;
// the flags used for the last DoDragDrop()
static long gs_flagsForDrag = 0;
// the trace mask we use with wxLogTrace() - call
// wxLog::AddTraceMask(TRACE_DND) to enable the trace messages from here
// (there are quite a few of them, so don't enable this by default)
static const wxChar *TRACE_DND = _T("dnd");
// the trace mask we use with wxLogTrace() - call
// wxLog::AddTraceMask(TRACE_DND) to enable the trace messages from here
// (there are quite a few of them, so don't enable this by default)
static const wxChar *TRACE_DND = _T("dnd");
+// global variables because GTK+ DnD want to have the
+// mouse event that caused it
extern GdkEvent *g_lastMouseEvent;
extern GdkEvent *g_lastMouseEvent;
extern int g_lastButtonNumber;
//----------------------------------------------------------------------------
extern int g_lastButtonNumber;
//----------------------------------------------------------------------------
if (g_blockEventsOnDrag)
return wxDragNone;
if (g_blockEventsOnDrag)
return wxDragNone;
+ // don't start dragging if no button is down
+ if (g_lastButtonNumber == 0)
+ return wxDragNone;
+
+ // we can only start a drag after a mouse event
+ if (g_lastMouseEvent == NULL)
+ return wxDragNone;
+
// disabled for now
g_blockEventsOnDrag = true;
// disabled for now
g_blockEventsOnDrag = true;
- /* don't start dragging if no button is down */
- if (g_lastButtonNumber)
- {
int action = GDK_ACTION_COPY;
if ( flags & wxDrag_AllowMove )
action |= GDK_ACTION_MOVE;
int action = GDK_ACTION_COPY;
if ( flags & wxDrag_AllowMove )
action |= GDK_ACTION_MOVE;
m_retValue = ConvertFromGTK(context->action);
if ( m_retValue == wxDragNone )
m_retValue = wxDragCancel;
m_retValue = ConvertFromGTK(context->action);
if ( m_retValue == wxDragNone )
m_retValue = wxDragCancel;
g_blockEventsOnDrag = false;
g_blockEventsOnDrag = false;
// the last click here (extern: used from gtk/menu.cpp)
guint32 wxGtkTimeLastClick = 0;
// the last click here (extern: used from gtk/menu.cpp)
guint32 wxGtkTimeLastClick = 0;
-// Save the last mouse event for drag start
+// global variables because GTK+ DnD want to have the
+// mouse event that caused it
GdkEvent *g_lastMouseEvent = (GdkEvent*) NULL;
int g_lastButtonNumber = 0;
GdkEvent *g_lastMouseEvent = (GdkEvent*) NULL;
int g_lastButtonNumber = 0;
if (win->GetEventHandler()->ProcessEvent( event ))
{
gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "button_press_event" );
if (win->GetEventHandler()->ProcessEvent( event ))
{
gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "button_press_event" );
+ g_lastMouseEvent = NULL;
+ g_lastMouseEvent = NULL;
if (event_type == wxEVT_RIGHT_DOWN)
{
if (event_type == wxEVT_RIGHT_DOWN)
{
win = FindWindowForMouseEvent(win, event.m_x, event.m_y);
}
win = FindWindowForMouseEvent(win, event.m_x, event.m_y);
}
- if (win->GetEventHandler()->ProcessEvent( event ))
+ bool ret = win->GetEventHandler()->ProcessEvent( event );
+ g_lastMouseEvent = NULL;
+
+ if ( ret )
{
gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "motion_notify_event" );
{
gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "motion_notify_event" );
+ return ret ? TRUE : FALSE;