If we have pressure but not BTN_TOUCH, force the pressure to 0. Otherwise, force distance to 0.
Signed-off-by: Peter Hutterer <[email protected]> --- src/evdev-tablet.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/evdev-tablet.c b/src/evdev-tablet.c index 395cbef..e9473e8 100644 --- a/src/evdev-tablet.c +++ b/src/evdev-tablet.c @@ -846,22 +846,34 @@ tablet_notify_buttons(struct tablet_dispatch *tablet, static void sanitize_tablet_axes(struct tablet_dispatch *tablet) { + bool tool_in_contact; const struct input_absinfo *distance, *pressure; distance = libevdev_get_abs_info(tablet->device->evdev, ABS_DISTANCE); pressure = libevdev_get_abs_info(tablet->device->evdev, ABS_PRESSURE); + tool_in_contact = (tablet_has_status(tablet, TABLET_TOOL_IN_CONTACT) || + tablet_has_status(tablet, + TABLET_TOOL_ENTERING_CONTACT)); + /* Keep distance and pressure mutually exclusive */ if ((bit_is_set(tablet->changed_axes, LIBINPUT_TABLET_TOOL_AXIS_DISTANCE) || bit_is_set(tablet->changed_axes, LIBINPUT_TABLET_TOOL_AXIS_DISTANCE)) && distance->value > distance->minimum && pressure->value > pressure->minimum) { - clear_bit(tablet->changed_axes, LIBINPUT_TABLET_TOOL_AXIS_DISTANCE); - tablet->axes[LIBINPUT_TABLET_TOOL_AXIS_DISTANCE] = 0; + if (tool_in_contact) { + clear_bit(tablet->changed_axes, + LIBINPUT_TABLET_TOOL_AXIS_DISTANCE); + tablet->axes[LIBINPUT_TABLET_TOOL_AXIS_DISTANCE] = + 0; + } else { + clear_bit(tablet->changed_axes, + LIBINPUT_TABLET_TOOL_AXIS_PRESSURE); + tablet->axes[LIBINPUT_TABLET_TOOL_AXIS_PRESSURE] = 0; + } } else if (bit_is_set(tablet->changed_axes, LIBINPUT_TABLET_TOOL_AXIS_PRESSURE) && - (!tablet_has_status(tablet, TABLET_TOOL_IN_CONTACT) && - !tablet_has_status(tablet, TABLET_TOOL_ENTERING_CONTACT))) { + !tool_in_contact) { /* Make sure that the last axis value sent to the caller is a 0 */ if (tablet->axes[LIBINPUT_TABLET_TOOL_AXIS_PRESSURE] == 0) clear_bit(tablet->changed_axes, -- 2.5.0 _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
