diff --git a/0001-tablet-don-t-set-rotation-on-a-tool-if-we-don-t-have.patch b/0001-tablet-don-t-set-rotation-on-a-tool-if-we-don-t-have.patch new file mode 100644 index 0000000..d4ed141 --- /dev/null +++ b/0001-tablet-don-t-set-rotation-on-a-tool-if-we-don-t-have.patch @@ -0,0 +1,56 @@ +From d26b08b93f05eba58d46ad6811e71e9da0e74201 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Mon, 5 Feb 2018 09:11:42 +1000 +Subject: [PATCH libinput] tablet: don't set rotation on a tool if we don't + have ABS_Z + +Rotation on a tool can either ABS_Z or in the case of the mouse/lens tools a +combination of ABS_TILT_X/Y. The code assumes that if the rotation on a stylus +(not mouse/lense) changes, we need to fetch it from ABS_Z. This happens on the +very first event from the tablet, proximity in invalidates all axes so we can +send the current state to the caller. + +On libwacom-recognized tablets we never set the rotation bit on the stylus, so +that's all fine. On tablets without libwacom support, the stylus may have a +rotation bit copied because we have it set thanks to mouse+tilt on the tablet. +When that first event is handled, we try to access ABS_Z. On tablets without +ABS_Z like Aipteks, we go boom. + +Fix this by checking for ABS_Z during tablet init, if we don't have that axis +then never set the rotation bit on the tool. That's the only axis where we +need this, all other axes have a single cause only and thus the tablet bits +are accurate anyway. + +https://bugs.freedesktop.org/show_bug.cgi?id=104939 + +Signed-off-by: Peter Hutterer +--- + src/evdev-tablet.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/src/evdev-tablet.c b/src/evdev-tablet.c +index 2f6b64da..771e7775 100644 +--- a/src/evdev-tablet.c ++++ b/src/evdev-tablet.c +@@ -933,7 +933,17 @@ tool_set_bits(const struct tablet_dispatch *tablet, + copy_axis_cap(tablet, tool, LIBINPUT_TABLET_TOOL_AXIS_TILT_X); + copy_axis_cap(tablet, tool, LIBINPUT_TABLET_TOOL_AXIS_TILT_Y); + copy_axis_cap(tablet, tool, LIBINPUT_TABLET_TOOL_AXIS_SLIDER); +- copy_axis_cap(tablet, tool, LIBINPUT_TABLET_TOOL_AXIS_ROTATION_Z); ++ ++ /* Rotation is special, it can be either ABS_Z or ++ * BTN_TOOL_MOUSE+ABS_TILT_X/Y. Aiptek tablets have ++ * mouse+tilt (and thus rotation), but they do not have ++ * ABS_Z. So let's not copy the axis bit if we don't have ++ * ABS_Z, otherwise we try to get the value from it later on ++ * proximity in and go boom because the absinfo isn't there. ++ */ ++ if (libevdev_has_event_code(tablet->device->evdev, EV_ABS, ++ ABS_Z)) ++ copy_axis_cap(tablet, tool, LIBINPUT_TABLET_TOOL_AXIS_ROTATION_Z); + break; + case LIBINPUT_TABLET_TOOL_TYPE_MOUSE: + case LIBINPUT_TABLET_TOOL_TYPE_LENS: +-- +2.14.3 + diff --git a/libinput.spec b/libinput.spec index 0ee025e..e02e637 100644 --- a/libinput.spec +++ b/libinput.spec @@ -5,7 +5,7 @@ Name: libinput Version: 1.9.901 -Release: 2%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist} +Release: 3%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist} Summary: Input device library License: MIT @@ -18,6 +18,8 @@ Source2: commitid Source0: http://www.freedesktop.org/software/libinput/libinput-%{version}.tar.xz %endif +Patch01: 0001-tablet-don-t-set-rotation-on-a-tool-if-we-don-t-have.patch + BuildRequires: git-core BuildRequires: gcc BuildRequires: meson @@ -109,6 +111,10 @@ The %{name}-utils package contains tools to debug hardware and analyze %{_mandir}/man1/libinput-measure-trackpoint-range.1* %changelog +* Mon Feb 05 2018 Peter Hutterer 1.9.901-3 +- Fix crasher on first event from tablets not supported by libwacom + (#1535755) + * Fri Feb 02 2018 Peter Hutterer 1.9.901-2 - Use autosetup instead of the manual git magic