From 1fbda0e81dea63a8b6087c826eb42101dd3e486b Mon Sep 17 00:00:00 2001 From: Ander Conselvan de Oliveira Date: Thu, 28 Jun 2012 18:08:04 +0300 Subject: [PATCH] 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. --- src/compositor.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) 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 @@ 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) -- 2.7.4