diff --git a/src/evdev-tablet.c b/src/evdev-tablet.c index 413fb42f..daef7ac8 100644 --- a/src/evdev-tablet.c +++ b/src/evdev-tablet.c @@ -120,6 +120,12 @@ tablet_history_get(const struct tablet_dispatch *tablet, unsigned int index) return &tablet->history.samples[index]; } +static inline void +tablet_reset_changed_axes(struct tablet_dispatch *tablet) +{ + memset(tablet->changed_axes, 0, sizeof(tablet->changed_axes)); +} + static bool tablet_device_has_axis(struct tablet_dispatch *tablet, enum libinput_tablet_tool_axis axis) @@ -1328,7 +1334,7 @@ static inline bool tablet_send_proximity_in(struct tablet_dispatch *tablet, struct libinput_tablet_tool *tool, struct evdev_device *device, - const struct tablet_axes *axes, + struct tablet_axes *axes, uint64_t time) { if (!tablet_has_status(tablet, TABLET_TOOL_ENTERING_PROXIMITY)) @@ -1343,6 +1349,10 @@ tablet_send_proximity_in(struct tablet_dispatch *tablet, tablet_unset_status(tablet, TABLET_TOOL_ENTERING_PROXIMITY); tablet_unset_status(tablet, TABLET_AXES_UPDATED); + tablet_reset_changed_axes(tablet); + axes->delta.x = 0; + axes->delta.y = 0; + return true; } @@ -1350,7 +1360,7 @@ static inline bool tablet_send_proximity_out(struct tablet_dispatch *tablet, struct libinput_tablet_tool *tool, struct evdev_device *device, - const struct tablet_axes *axes, + struct tablet_axes *axes, uint64_t time) { if (!tablet_has_status(tablet, TABLET_TOOL_LEAVING_PROXIMITY)) @@ -1366,6 +1376,10 @@ tablet_send_proximity_out(struct tablet_dispatch *tablet, tablet_set_status(tablet, TABLET_TOOL_OUT_OF_PROXIMITY); tablet_unset_status(tablet, TABLET_TOOL_LEAVING_PROXIMITY); + tablet_reset_changed_axes(tablet); + axes->delta.x = 0; + axes->delta.y = 0; + return true; } @@ -1373,7 +1387,7 @@ static inline bool tablet_send_tip(struct tablet_dispatch *tablet, struct libinput_tablet_tool *tool, struct evdev_device *device, - const struct tablet_axes *axes, + struct tablet_axes *axes, uint64_t time) { if (tablet_has_status(tablet, TABLET_TOOL_ENTERING_CONTACT)) { @@ -1386,6 +1400,11 @@ tablet_send_tip(struct tablet_dispatch *tablet, tablet_unset_status(tablet, TABLET_AXES_UPDATED); tablet_unset_status(tablet, TABLET_TOOL_ENTERING_CONTACT); tablet_set_status(tablet, TABLET_TOOL_IN_CONTACT); + + tablet_reset_changed_axes(tablet); + axes->delta.x = 0; + axes->delta.y = 0; + return true; } @@ -1399,6 +1418,11 @@ tablet_send_tip(struct tablet_dispatch *tablet, tablet_unset_status(tablet, TABLET_AXES_UPDATED); tablet_unset_status(tablet, TABLET_TOOL_LEAVING_CONTACT); tablet_unset_status(tablet, TABLET_TOOL_IN_CONTACT); + + tablet_reset_changed_axes(tablet); + axes->delta.x = 0; + axes->delta.y = 0; + return true; } @@ -1409,7 +1433,7 @@ static inline void tablet_send_axes(struct tablet_dispatch *tablet, struct libinput_tablet_tool *tool, struct evdev_device *device, - const struct tablet_axes *axes, + struct tablet_axes *axes, uint64_t time) { enum libinput_tablet_tool_tip_state tip_state; @@ -1430,6 +1454,9 @@ tablet_send_axes(struct tablet_dispatch *tablet, tablet->changed_axes, axes); tablet_unset_status(tablet, TABLET_AXES_UPDATED); + tablet_reset_changed_axes(tablet); + axes->delta.x = 0; + axes->delta.y = 0; } static inline void @@ -1486,8 +1513,8 @@ tablet_send_events(struct tablet_dispatch *tablet, if (!tablet_send_tip(tablet, tool, device, &axes, time)) tablet_send_axes(tablet, tool, device, &axes, time); - memset(tablet->changed_axes, 0, sizeof(tablet->changed_axes)); tablet_unset_status(tablet, TABLET_TOOL_ENTERING_CONTACT); + tablet_reset_changed_axes(tablet); tablet_send_buttons(tablet, tool, device, time);