simplify mouse button handling code
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72157 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1313,142 +1313,79 @@ gtk_window_button_press_callback( GtkWidget* WXUNUSED_IN_GTK3(widget),
|
|||||||
|
|
||||||
g_lastButtonNumber = gdk_event->button;
|
g_lastButtonNumber = gdk_event->button;
|
||||||
|
|
||||||
// GDK sends surplus button down events
|
wxEventType event_type;
|
||||||
// before a double click event. We
|
wxEventType down;
|
||||||
// need to filter these out.
|
wxEventType dclick;
|
||||||
if ((gdk_event->type == GDK_BUTTON_PRESS) && (win->m_wxwindow))
|
switch (gdk_event->button)
|
||||||
{
|
{
|
||||||
GdkEvent *peek_event = gdk_event_peek();
|
case 1:
|
||||||
if (peek_event)
|
down = wxEVT_LEFT_DOWN;
|
||||||
{
|
dclick = wxEVT_LEFT_DCLICK;
|
||||||
if ((peek_event->type == GDK_2BUTTON_PRESS) ||
|
break;
|
||||||
(peek_event->type == GDK_3BUTTON_PRESS))
|
case 2:
|
||||||
{
|
down = wxEVT_MIDDLE_DOWN;
|
||||||
gdk_event_free( peek_event );
|
dclick = wxEVT_MIDDLE_DCLICK;
|
||||||
return TRUE;
|
break;
|
||||||
}
|
case 3:
|
||||||
else
|
down = wxEVT_RIGHT_DOWN;
|
||||||
{
|
dclick = wxEVT_RIGHT_DCLICK;
|
||||||
gdk_event_free( peek_event );
|
break;
|
||||||
}
|
case 8:
|
||||||
}
|
down = wxEVT_AUX1_DOWN;
|
||||||
|
dclick = wxEVT_AUX1_DCLICK;
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
down = wxEVT_AUX2_DOWN;
|
||||||
|
dclick = wxEVT_AUX2_DCLICK;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
switch (gdk_event->type)
|
||||||
wxEventType event_type = wxEVT_NULL;
|
{
|
||||||
|
case GDK_BUTTON_PRESS:
|
||||||
|
event_type = down;
|
||||||
|
// GDK sends surplus button down events
|
||||||
|
// before a double click event. We
|
||||||
|
// need to filter these out.
|
||||||
|
if (win->m_wxwindow)
|
||||||
|
{
|
||||||
|
GdkEvent* peek_event = gdk_event_peek();
|
||||||
|
if (peek_event)
|
||||||
|
{
|
||||||
|
const GdkEventType peek_event_type = peek_event->type;
|
||||||
|
gdk_event_free(peek_event);
|
||||||
|
if (peek_event_type == GDK_2BUTTON_PRESS ||
|
||||||
|
peek_event_type == GDK_3BUTTON_PRESS)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case GDK_2BUTTON_PRESS:
|
||||||
|
event_type = dclick;
|
||||||
#ifndef __WXGTK3__
|
#ifndef __WXGTK3__
|
||||||
if ( gdk_event->type == GDK_2BUTTON_PRESS &&
|
if (gdk_event->button >= 1 && gdk_event->button <= 3)
|
||||||
gdk_event->button >= 1 && gdk_event->button <= 3 )
|
{
|
||||||
{
|
// Reset GDK internal timestamp variables in order to disable GDK
|
||||||
// Reset GDK internal timestamp variables in order to disable GDK
|
// triple click events. GDK will then next time believe no button has
|
||||||
// triple click events. GDK will then next time believe no button has
|
// been clicked just before, and send a normal button click event.
|
||||||
// been clicked just before, and send a normal button click event.
|
GdkDisplay* display = gtk_widget_get_display(widget);
|
||||||
GdkDisplay* display = gtk_widget_get_display (widget);
|
display->button_click_time[1] = 0;
|
||||||
display->button_click_time[1] = 0;
|
display->button_click_time[0] = 0;
|
||||||
display->button_click_time[0] = 0;
|
}
|
||||||
}
|
|
||||||
#endif // !__WXGTK3__
|
#endif // !__WXGTK3__
|
||||||
|
break;
|
||||||
if (gdk_event->button == 1)
|
// we shouldn't get triple clicks at all for GTK2 because we
|
||||||
{
|
// suppress them artificially using the code above but we still
|
||||||
// note that GDK generates triple click events which are not supported
|
// should map them to something for GTK3 and not just ignore them
|
||||||
// by wxWidgets but still have to be passed to the app as otherwise
|
// as this would lose clicks
|
||||||
// clicks would simply go missing
|
case GDK_3BUTTON_PRESS:
|
||||||
switch (gdk_event->type)
|
event_type = down;
|
||||||
{
|
break;
|
||||||
// we shouldn't get triple clicks at all for GTK2 because we
|
default:
|
||||||
// suppress them artificially using the code above but we still
|
return false;
|
||||||
// should map them to something for GTK1 and not just ignore them
|
|
||||||
// as this would lose clicks
|
|
||||||
case GDK_3BUTTON_PRESS: // we could also map this to DCLICK...
|
|
||||||
case GDK_BUTTON_PRESS:
|
|
||||||
event_type = wxEVT_LEFT_DOWN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_2BUTTON_PRESS:
|
|
||||||
event_type = wxEVT_LEFT_DCLICK;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
// just to silence gcc warnings
|
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (gdk_event->button == 2)
|
|
||||||
{
|
|
||||||
switch (gdk_event->type)
|
|
||||||
{
|
|
||||||
case GDK_3BUTTON_PRESS:
|
|
||||||
case GDK_BUTTON_PRESS:
|
|
||||||
event_type = wxEVT_MIDDLE_DOWN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_2BUTTON_PRESS:
|
|
||||||
event_type = wxEVT_MIDDLE_DCLICK;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (gdk_event->button == 3)
|
|
||||||
{
|
|
||||||
switch (gdk_event->type)
|
|
||||||
{
|
|
||||||
case GDK_3BUTTON_PRESS:
|
|
||||||
case GDK_BUTTON_PRESS:
|
|
||||||
event_type = wxEVT_RIGHT_DOWN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_2BUTTON_PRESS:
|
|
||||||
event_type = wxEVT_RIGHT_DCLICK;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (gdk_event->button == 8)
|
|
||||||
{
|
|
||||||
switch (gdk_event->type)
|
|
||||||
{
|
|
||||||
case GDK_3BUTTON_PRESS:
|
|
||||||
case GDK_BUTTON_PRESS:
|
|
||||||
event_type = wxEVT_AUX1_DOWN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_2BUTTON_PRESS:
|
|
||||||
event_type = wxEVT_AUX1_DCLICK;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (gdk_event->button == 9)
|
|
||||||
{
|
|
||||||
switch (gdk_event->type)
|
|
||||||
{
|
|
||||||
case GDK_3BUTTON_PRESS:
|
|
||||||
case GDK_BUTTON_PRESS:
|
|
||||||
event_type = wxEVT_AUX2_DOWN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_2BUTTON_PRESS:
|
|
||||||
event_type = wxEVT_AUX2_DCLICK;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( event_type == wxEVT_NULL )
|
|
||||||
{
|
|
||||||
// unknown mouse button or click type
|
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_lastMouseEvent = (GdkEvent*) gdk_event;
|
g_lastMouseEvent = (GdkEvent*) gdk_event;
|
||||||
|
Reference in New Issue
Block a user