diff options
author | Kristian Høgsberg <krh@redhat.com> | 2009-02-14 17:47:55 -0500 |
---|---|---|
committer | Kristian Høgsberg <krh@redhat.com> | 2009-02-15 22:33:59 -0500 |
commit | 7b6907f67866f993bac51516ce4352a868c7256c (patch) | |
tree | de94c31d594221675407901342a80d4725b98a5b | |
parent | bb8cd938b51a60e3ff1eb1f85b5dc7401a0286de (diff) |
Don't forget to transform coordinates for the grab surface.
-rw-r--r-- | wayland-system-compositor.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/wayland-system-compositor.c b/wayland-system-compositor.c index 9ba4ea3..90d61bf 100644 --- a/wayland-system-compositor.c +++ b/wayland-system-compositor.c @@ -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; } |