From e9771d642fb4ecc5fca94ff6a2a63466c3541df6 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 23 Aug 2016 20:16:02 +0200 Subject: [PATCH] GtkPadController: Make ring/strip actions be activated with the axis value This way these axes may be used in detail by the implementors of pad GActions. https://bugzilla.gnome.org/show_bug.cgi?id=770026 --- gtk/gtkpadcontroller.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/gtk/gtkpadcontroller.c b/gtk/gtkpadcontroller.c index df54d5d49e..c1a9af714e 100644 --- a/gtk/gtkpadcontroller.c +++ b/gtk/gtkpadcontroller.c @@ -61,6 +61,10 @@ * … * pad_controller = gtk_pad_controller_new (window, action_group, NULL); * ]| + * + * The actions belonging to rings/strips will be activated with a parameter + * of type %G_VARIANT_TYPE_DOUBLE bearing the value of the given axis, it + * is required that those are made stateful and accepting this #GVariantType. */ #include "config.h" @@ -154,6 +158,16 @@ gtk_pad_controller_activate_action (GtkPadController *controller, NULL); } +static void +gtk_pad_controller_activate_action_with_axis (GtkPadController *controller, + const GtkPadActionEntry *entry, + gdouble value) +{ + g_action_group_activate_action (controller->action_group, + entry->action_name, + g_variant_new_double (value)); +} + static void gtk_pad_controller_handle_mode_switch (GtkPadController *controller, GdkDevice *pad, @@ -253,7 +267,16 @@ gtk_pad_controller_handle_event (GtkEventController *controller, if (!entry) return GDK_EVENT_PROPAGATE; - gtk_pad_controller_activate_action (pad_controller, entry); + if (event->type == GDK_PAD_RING || + event->type == GDK_PAD_STRIP) + { + gtk_pad_controller_activate_action_with_axis (pad_controller, entry, + event->pad_axis.value); + } + else + { + gtk_pad_controller_activate_action (pad_controller, entry); + } return GDK_EVENT_STOP; }