evdev: fetch absolute coordinates inside flush_motion only

Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
dev
Tiago Vignatti 13 years ago
parent 5c900ce08d
commit f547bd36e6
  1. 11
      compositor/evdev.c

@ -208,8 +208,9 @@ evdev_flush_motion(struct wl_input_device *device, uint32_t time,
struct evdev_motion_accumulator *accum) struct evdev_motion_accumulator *accum)
{ {
if (accum->type == EVDEV_RELATIVE_MOTION) { if (accum->type == EVDEV_RELATIVE_MOTION) {
notify_motion(device, time, accum->x + accum->dx, accum->dx += device->x;
accum->y + accum->dy); accum->dy += device->y;
notify_motion(device, time, accum->dx, accum->dy);
accum->dx = accum->dy = 0; accum->dx = accum->dy = 0;
} }
if (accum->type == EVDEV_ABSOLUTE_MOTION) if (accum->type == EVDEV_ABSOLUTE_MOTION)
@ -233,16 +234,14 @@ evdev_input_device_data(int fd, uint32_t mask, void *data)
if (!ec->focus) if (!ec->focus)
return 1; 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); len = read(fd, &ev, sizeof ev);
if (len < 0 || len % sizeof e[0] != 0) { if (len < 0 || len % sizeof e[0] != 0) {
/* FIXME: call device_removed when errno is ENODEV. */; /* FIXME: call device_removed when errno is ENODEV. */;
return 1; return 1;
} }
memset(&accumulator, 0, sizeof accumulator);
e = ev; e = ev;
end = (void *) ev + len; end = (void *) ev + len;
for (e = ev; e < end; e++) { for (e = ev; e < end; e++) {

Loading…
Cancel
Save