mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 23:50:41 -05:00
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.
This commit is contained in:
parent
aef997f7a1
commit
1c1785ea6e
@ -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));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user