gtkgestureswipe: Handle touchpad swipe events

These will only trigger the gesture if it's been created with
the same GtkGesture::n-points than n_fingers in the event.
This commit is contained in:
Carlos Garnacho 2015-07-24 13:03:09 +02:00
parent 5f68a2877d
commit 5d17338b4d

View File

@ -77,6 +77,26 @@ gtk_gesture_swipe_finalize (GObject *object)
G_OBJECT_CLASS (gtk_gesture_swipe_parent_class)->finalize (object);
}
static gboolean
gtk_gesture_swipe_filter_event (GtkEventController *controller,
const GdkEvent *event)
{
/* Let touchpad swipe events go through, only if they match n-points */
if (event->type == GDK_TOUCHPAD_SWIPE)
{
guint n_points;
g_object_get (G_OBJECT (controller), "n-points", &n_points, NULL);
if (event->touchpad_swipe.n_fingers == n_points)
return FALSE;
else
return TRUE;
}
return GTK_EVENT_CONTROLLER_CLASS (gtk_gesture_swipe_parent_class)->filter_event (controller, event);
}
static void
_gtk_gesture_swipe_clear_backlog (GtkGestureSwipe *gesture,
guint32 evtime)
@ -188,10 +208,13 @@ static void
gtk_gesture_swipe_class_init (GtkGestureSwipeClass *klass)
{
GtkGestureClass *gesture_class = GTK_GESTURE_CLASS (klass);
GtkEventControllerClass *event_controller_class = GTK_EVENT_CONTROLLER_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->finalize = gtk_gesture_swipe_finalize;
event_controller_class->filter_event = gtk_gesture_swipe_filter_event;
gesture_class->update = gtk_gesture_swipe_update;
gesture_class->end = gtk_gesture_swipe_end;