Don't forget to transform coordinates for the grab surface.
authorKristian Høgsberg <krh@redhat.com>
Sat, 14 Feb 2009 22:47:55 +0000 (17:47 -0500)
committerKristian Høgsberg <krh@redhat.com>
Mon, 16 Feb 2009 03:33:59 +0000 (22:33 -0500)
wayland-system-compositor.c

index 9ba4ea3..90d61bf 100644 (file)
@@ -849,14 +849,26 @@ const static struct wl_compositor_interface compositor_interface = {
        compositor_commit
 };
 
+static void
+wlsc_surface_transform(struct wlsc_surface *surface,
+                      int32_t x, int32_t y, int32_t *sx, int32_t *sy)
+{
+       /* Transform to surface coordinates. */
+       *sx = (x - surface->map.x) * surface->width / surface->map.width;
+       *sy = (y - surface->map.y) * surface->height / surface->map.height;
+}
+
 static struct wlsc_surface *
 pick_surface(struct wlsc_input_device *device, int32_t *sx, int32_t *sy)
 {
        struct wlsc_compositor *ec = device->ec;
        struct wlsc_surface *es;
 
-       if (device->grab > 0)
+       if (device->grab > 0) {
+               wlsc_surface_transform(device->grab_surface,
+                                      device->x, device->y, sx, sy);
                return device->grab_surface;
+       }
 
        es = container_of(ec->surface_list.prev,
                          struct wlsc_surface, link);
@@ -865,10 +877,7 @@ pick_surface(struct wlsc_input_device *device, int32_t *sx, int32_t *sy)
                    device->x < es->map.x + es->map.width &&
                    es->map.y <= device->y &&
                    device->y < es->map.y + es->map.height) {
-                       /* Transform to surface coordinates. */
-                       *sx = (device->x - es->map.x) * es->width / es->map.width;
-                       *sy = (device->y - es->map.y) * es->height / es->map.height;
-
+                       wlsc_surface_transform(es, device->x, device->y, sx, sy);
                        return es;
                }