mirror of
https://github.com/brl/mutter.git
synced 2024-12-23 19:42:05 +00: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
18f301cec9
commit
b34fe72bb7
@ -217,6 +217,23 @@ meta_wayland_tablet_pad_free (MetaWaylandTabletPad *pad)
|
|||||||
g_slice_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
|
static void
|
||||||
tablet_pad_set_feedback (struct wl_client *client,
|
tablet_pad_set_feedback (struct wl_client *client,
|
||||||
struct wl_resource *resource,
|
struct wl_resource *resource,
|
||||||
@ -225,8 +242,20 @@ tablet_pad_set_feedback (struct wl_client *client,
|
|||||||
uint32_t serial)
|
uint32_t serial)
|
||||||
{
|
{
|
||||||
MetaWaylandTabletPad *pad = wl_resource_get_user_data (resource);
|
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_backend_get_input_settings (meta_get_backend ());
|
||||||
|
|
||||||
|
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));
|
g_hash_table_insert (pad->feedback, GUINT_TO_POINTER (button), g_strdup (str));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user