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:
Ander Conselvan de Oliveira
2012-06-28 18:08:04 +03:00
committed by Kristian Høgsberg
parent 73694c832b
commit 1fbda0e81d
+15 -11
View File
@@ -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)