From: Rob Bradford <[email protected]>

The Wayland protocol specifies that the cursor hotspot positions should be
specified as fixed point. Unfortunately weston was prevously accepting those
as integers instead. With this change we accept both but provide a warning if
using the wrong type. For this compatability we assume we'll never get a
fractional hotspot between 0 and 1.

Bug spotted by Henri Tuhola <[email protected]>
---
 src/compositor.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/compositor.c b/src/compositor.c
index 693df2c..7ae5e79 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -2367,8 +2367,15 @@ pointer_set_cursor(struct wl_client *client, struct 
wl_resource *resource,
        surface->configure = pointer_cursor_surface_configure;
        surface->configure_private = seat;
        seat->sprite = surface;
-       seat->hotspot_x = x;
-       seat->hotspot_y = y;
+
+       if ((x == 0 || (int32_t)x >= 256) && (y == 0 || (int32_t)y >= 256)) {
+               seat->hotspot_x = wl_fixed_to_int((int32_t)x);
+               seat->hotspot_y = wl_fixed_to_int((int32_t)y);
+       } else {
+               weston_log("Client using integers rather than fixed for 
hotspot.\n");
+               seat->hotspot_x = x;
+               seat->hotspot_y = y;
+       }
 
        if (surface->buffer_ref.buffer)
                pointer_cursor_surface_configure(surface, 0, 0, 
weston_surface_buffer_width(surface),
-- 
1.8.1.4

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to