From c6beb1cfc52bbbb7edc79edc93ab80d29a95caef Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Wed, 29 Jun 2016 18:39:31 +0200 Subject: [PATCH] wayland: Emit wp_tablet_pad_group.buttons after focus changes The buttons grabbed by the compositor might have changed in between, so just broadcast the button array again. --- src/wayland/meta-wayland-tablet-pad-group.c | 38 +++++++++++++++++---- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/src/wayland/meta-wayland-tablet-pad-group.c b/src/wayland/meta-wayland-tablet-pad-group.c index d3faac93a..d8d9d37f8 100644 --- a/src/wayland/meta-wayland-tablet-pad-group.c +++ b/src/wayland/meta-wayland-tablet-pad-group.c @@ -191,18 +191,15 @@ meta_wayland_tablet_pad_group_has_button (MetaWaylandTabletPadGroup *group, } } -void -meta_wayland_tablet_pad_group_notify (MetaWaylandTabletPadGroup *group, - struct wl_resource *resource) +static void +meta_wayland_tablet_pad_group_send_buttons (MetaWaylandTabletPadGroup *group, + struct wl_resource *resource) { - struct wl_client *client = wl_resource_get_client (resource); struct wl_array buttons; - guint i, n_modes; - GList *l; + guint i; wl_array_init (&buttons); - /* Buttons */ for (i = 0; i < group->pad->n_buttons; i++) { uint32_t *pos; @@ -216,6 +213,21 @@ meta_wayland_tablet_pad_group_notify (MetaWaylandTabletPadGroup *group, zwp_tablet_pad_group_v2_send_buttons (resource, &buttons); wl_array_release (&buttons); +} + +void +meta_wayland_tablet_pad_group_notify (MetaWaylandTabletPadGroup *group, + struct wl_resource *resource) +{ + struct wl_client *client = wl_resource_get_client (resource); + struct wl_array buttons; + guint n_modes; + GList *l; + + wl_array_init (&buttons); + + /* Buttons */ + meta_wayland_tablet_pad_group_send_buttons (group, resource); /* Rings */ for (l = group->rings; l; l = l->next) @@ -315,6 +327,17 @@ broadcast_group_mode (MetaWaylandTabletPadGroup *group, } } +static void +broadcast_group_buttons (MetaWaylandTabletPadGroup *group) +{ + struct wl_resource *resource; + + wl_resource_for_each (resource, &group->focus_resource_list) + { + meta_wayland_tablet_pad_group_send_buttons (group, resource); + } +} + gboolean meta_wayland_tablet_pad_group_handle_event (MetaWaylandTabletPadGroup *group, const ClutterEvent *event) @@ -406,6 +429,7 @@ meta_wayland_tablet_pad_group_sync_focus (MetaWaylandTabletPadGroup *group) if (!wl_list_empty (&group->focus_resource_list)) { broadcast_group_mode (group, clutter_get_current_event_time ()); + broadcast_group_buttons (group); } }