From 1c1785ea6e00e89f2b47392bae8f7536ebeb7f30 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Wed, 29 Jun 2016 18:31:24 +0200 Subject: [PATCH] wayland: Check serial on wp_tablet_pad.set_feedback We must lookup the mode switch serial for the group where the button belongs to. Also, avoid the changes if the client requests setting the feedback for buttons owned by the compositor. --- src/wayland/meta-wayland-tablet-pad.c | 31 ++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/wayland/meta-wayland-tablet-pad.c b/src/wayland/meta-wayland-tablet-pad.c index 32c734aa3..ad71aee4b 100644 --- a/src/wayland/meta-wayland-tablet-pad.c +++ b/src/wayland/meta-wayland-tablet-pad.c @@ -222,6 +222,23 @@ meta_wayland_tablet_pad_free (MetaWaylandTabletPad *pad) g_slice_free (MetaWaylandTabletPad, pad); } +static MetaWaylandTabletPadGroup * +tablet_pad_lookup_button_group (MetaWaylandTabletPad *pad, + guint button) +{ + GList *l; + + for (l = pad->groups; l; l = l->next) + { + MetaWaylandTabletPadGroup *group = l->data; + + if (meta_wayland_tablet_pad_group_has_button (group, button)) + return group; + } + + return NULL; +} + static void tablet_pad_set_feedback (struct wl_client *client, struct wl_resource *resource, @@ -230,8 +247,20 @@ tablet_pad_set_feedback (struct wl_client *client, uint32_t serial) { MetaWaylandTabletPad *pad = wl_resource_get_user_data (resource); + MetaWaylandTabletPadGroup *group = tablet_pad_lookup_button_group (pad, button); + MetaInputSettings *input_settings; - /* FIXME: check serial */ + if (!group || group->mode_switch_serial != serial) + return; + + input_settings = meta_input_settings_get (); + + if (input_settings && + meta_input_settings_is_pad_button_grabbed (input_settings, pad->device, button)) + return; + + if (meta_wayland_tablet_pad_group_is_mode_switch_button (group, button)) + return; g_hash_table_insert (pad->feedback, GUINT_TO_POINTER (button), g_strdup (str)); }