From f547bd36e67c85de8aaf1be6b704f153a15b36d6 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Tue, 22 Nov 2011 12:05:22 +0200 Subject: [PATCH] evdev: fetch absolute coordinates inside flush_motion only Signed-off-by: Tiago Vignatti --- compositor/evdev.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/compositor/evdev.c b/compositor/evdev.c index 96fb0cd9..06913cf4 100644 --- a/compositor/evdev.c +++ b/compositor/evdev.c @@ -208,8 +208,9 @@ evdev_flush_motion(struct wl_input_device *device, uint32_t time, struct evdev_motion_accumulator *accum) { if (accum->type == EVDEV_RELATIVE_MOTION) { - notify_motion(device, time, accum->x + accum->dx, - accum->y + accum->dy); + accum->dx += device->x; + accum->dy += device->y; + notify_motion(device, time, accum->dx, accum->dy); accum->dx = accum->dy = 0; } if (accum->type == EVDEV_ABSOLUTE_MOTION) @@ -233,16 +234,14 @@ evdev_input_device_data(int fd, uint32_t mask, void *data) if (!ec->focus) return 1; - memset(&accumulator, 0, sizeof accumulator); - accumulator.x = device->master->base.input_device.x; - accumulator.y = device->master->base.input_device.y; - len = read(fd, &ev, sizeof ev); if (len < 0 || len % sizeof e[0] != 0) { /* FIXME: call device_removed when errno is ENODEV. */; return 1; } + memset(&accumulator, 0, sizeof accumulator); + e = ev; end = (void *) ev + len; for (e = ev; e < end; e++) {