compositor: Always allow owner of pointer surface to change the hotspot
Make pointer_set_cursor() succeed if a client that doesn't have pointer focus but is the owner of the current pointer surface calls it.
This commit is contained in:
committed by
Kristian Høgsberg
parent
73694c832b
commit
1fbda0e81d
+15
-11
@@ -2173,22 +2173,26 @@ pointer_set_cursor(struct wl_client *client, struct wl_resource *resource,
|
||||
struct weston_seat *seat = resource->data;
|
||||
struct weston_surface *surface = NULL;
|
||||
|
||||
if (serial < seat->seat.pointer->focus_serial)
|
||||
return;
|
||||
if (seat->seat.pointer->focus == NULL)
|
||||
return;
|
||||
if (seat->seat.pointer->focus->resource.client != client)
|
||||
return;
|
||||
|
||||
if (surface_resource)
|
||||
surface = container_of(surface_resource->data,
|
||||
struct weston_surface, surface);
|
||||
|
||||
if (surface && surface != seat->sprite && surface->configure) {
|
||||
wl_resource_post_error(&surface->surface.resource,
|
||||
WL_DISPLAY_ERROR_INVALID_OBJECT,
|
||||
"surface->configure already set");
|
||||
if (serial < seat->seat.pointer->focus_serial)
|
||||
return;
|
||||
|
||||
if (surface && surface != seat->sprite) {
|
||||
if (seat->seat.pointer->focus == NULL)
|
||||
return;
|
||||
if (seat->seat.pointer->focus->resource.client != client)
|
||||
return;
|
||||
|
||||
if (surface->configure) {
|
||||
wl_resource_post_error(&surface->surface.resource,
|
||||
WL_DISPLAY_ERROR_INVALID_OBJECT,
|
||||
"surface->configure already "
|
||||
"set");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (seat->sprite)
|
||||
|
||||
Reference in New Issue
Block a user