|
|
@ -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++) { |
|
|
|