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.
diff --git a/src/compositor.c b/src/compositor.c
index df39274..bdcc2cd 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -2173,22 +2173,26 @@
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)