compositor: Always allow owner of pointer surface to change the hotspot
authorAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Thu, 28 Jun 2012 15:08:04 +0000 (18:08 +0300)
committerKristian Høgsberg <krh@bitplanet.net>
Thu, 28 Jun 2012 18:13:52 +0000 (14:13 -0400)
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

index df39274..bdcc2cd 100644 (file)
@@ -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)