wayland/seat: Unset resource user data when disabling
We make objects inert when disabling the seat, but we requests may still have effect. This is especially bad if disabling is followed by destroying, but also means e.g. set_cursor() not doing an early out after the pointer capability was disabled. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1822>
This commit is contained in:
parent
8303752e32
commit
9827687ca1
@ -121,21 +121,25 @@ meta_wayland_pointer_client_free (MetaWaylandPointerClient *pointer_client)
|
|||||||
{
|
{
|
||||||
wl_list_remove (wl_resource_get_link (resource));
|
wl_list_remove (wl_resource_get_link (resource));
|
||||||
wl_list_init (wl_resource_get_link (resource));
|
wl_list_init (wl_resource_get_link (resource));
|
||||||
|
wl_resource_set_user_data (resource, NULL);
|
||||||
}
|
}
|
||||||
wl_resource_for_each_safe (resource, next, &pointer_client->swipe_gesture_resources)
|
wl_resource_for_each_safe (resource, next, &pointer_client->swipe_gesture_resources)
|
||||||
{
|
{
|
||||||
wl_list_remove (wl_resource_get_link (resource));
|
wl_list_remove (wl_resource_get_link (resource));
|
||||||
wl_list_init (wl_resource_get_link (resource));
|
wl_list_init (wl_resource_get_link (resource));
|
||||||
|
wl_resource_set_user_data (resource, NULL);
|
||||||
}
|
}
|
||||||
wl_resource_for_each_safe (resource, next, &pointer_client->pinch_gesture_resources)
|
wl_resource_for_each_safe (resource, next, &pointer_client->pinch_gesture_resources)
|
||||||
{
|
{
|
||||||
wl_list_remove (wl_resource_get_link (resource));
|
wl_list_remove (wl_resource_get_link (resource));
|
||||||
wl_list_init (wl_resource_get_link (resource));
|
wl_list_init (wl_resource_get_link (resource));
|
||||||
|
wl_resource_set_user_data (resource, NULL);
|
||||||
}
|
}
|
||||||
wl_resource_for_each_safe (resource, next, &pointer_client->relative_pointer_resources)
|
wl_resource_for_each_safe (resource, next, &pointer_client->relative_pointer_resources)
|
||||||
{
|
{
|
||||||
wl_list_remove (wl_resource_get_link (resource));
|
wl_list_remove (wl_resource_get_link (resource));
|
||||||
wl_list_init (wl_resource_get_link (resource));
|
wl_list_init (wl_resource_get_link (resource));
|
||||||
|
wl_resource_set_user_data (resource, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (pointer_client);
|
g_free (pointer_client);
|
||||||
@ -200,6 +204,10 @@ meta_wayland_pointer_unbind_pointer_client_resource (struct wl_resource *resourc
|
|||||||
MetaWaylandPointerClient *pointer_client;
|
MetaWaylandPointerClient *pointer_client;
|
||||||
struct wl_client *client = wl_resource_get_client (resource);
|
struct wl_client *client = wl_resource_get_client (resource);
|
||||||
|
|
||||||
|
pointer = wl_resource_get_user_data (resource);
|
||||||
|
if (!pointer)
|
||||||
|
return;
|
||||||
|
|
||||||
wl_list_remove (wl_resource_get_link (resource));
|
wl_list_remove (wl_resource_get_link (resource));
|
||||||
|
|
||||||
pointer_client = meta_wayland_pointer_get_pointer_client (pointer, client);
|
pointer_client = meta_wayland_pointer_get_pointer_client (pointer, client);
|
||||||
@ -1105,9 +1113,13 @@ pointer_set_cursor (struct wl_client *client,
|
|||||||
struct wl_resource *surface_resource,
|
struct wl_resource *surface_resource,
|
||||||
int32_t hot_x, int32_t hot_y)
|
int32_t hot_x, int32_t hot_y)
|
||||||
{
|
{
|
||||||
MetaWaylandPointer *pointer = wl_resource_get_user_data (resource);
|
MetaWaylandPointer *pointer;
|
||||||
MetaWaylandSurface *surface;
|
MetaWaylandSurface *surface;
|
||||||
|
|
||||||
|
pointer = wl_resource_get_user_data (resource);
|
||||||
|
if (!pointer)
|
||||||
|
return;
|
||||||
|
|
||||||
surface = (surface_resource ? wl_resource_get_user_data (surface_resource) : NULL);
|
surface = (surface_resource ? wl_resource_get_user_data (surface_resource) : NULL);
|
||||||
|
|
||||||
if (pointer->focus_surface == NULL)
|
if (pointer->focus_surface == NULL)
|
||||||
|
Loading…
Reference in New Issue
Block a user