gtkgesturedrag: 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:
		| @ -56,6 +56,26 @@ static guint signals[N_SIGNALS] = { 0 }; | ||||
|  | ||||
| G_DEFINE_TYPE_WITH_PRIVATE (GtkGestureDrag, gtk_gesture_drag, GTK_TYPE_GESTURE_SINGLE) | ||||
|  | ||||
| static gboolean | ||||
| gtk_gesture_drag_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_drag_parent_class)->filter_event (controller, event); | ||||
| } | ||||
|  | ||||
| static void | ||||
| gtk_gesture_drag_begin (GtkGesture       *gesture, | ||||
|                         GdkEventSequence *sequence) | ||||
| @ -110,6 +130,9 @@ static void | ||||
| gtk_gesture_drag_class_init (GtkGestureDragClass *klass) | ||||
| { | ||||
|   GtkGestureClass *gesture_class = GTK_GESTURE_CLASS (klass); | ||||
|   GtkEventControllerClass *event_controller_class = GTK_EVENT_CONTROLLER_CLASS (klass); | ||||
|  | ||||
|   event_controller_class->filter_event = gtk_gesture_drag_filter_event; | ||||
|  | ||||
|   gesture_class->begin = gtk_gesture_drag_begin; | ||||
|   gesture_class->update = gtk_gesture_drag_update; | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Carlos Garnacho
					Carlos Garnacho