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_seat *seat = resource->data;
|
||||||
struct weston_surface *surface = NULL;
|
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)
|
if (surface_resource)
|
||||||
surface = container_of(surface_resource->data,
|
surface = container_of(surface_resource->data,
|
||||||
struct weston_surface, surface);
|
struct weston_surface, surface);
|
||||||
|
|
||||||
if (surface && surface != seat->sprite && surface->configure) {
|
if (serial < seat->seat.pointer->focus_serial)
|
||||||
wl_resource_post_error(&surface->surface.resource,
|
|
||||||
WL_DISPLAY_ERROR_INVALID_OBJECT,
|
|
||||||
"surface->configure already set");
|
|
||||||
return;
|
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)
|
if (seat->sprite)
|
||||||
|
|||||||
Reference in New Issue
Block a user