Fix crasher on first event from tablets not supported by libwacom
(#1535755)
This commit is contained in:
parent
60862d0ab5
commit
4afc4b052f
@ -0,0 +1,56 @@
|
||||
From d26b08b93f05eba58d46ad6811e71e9da0e74201 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||
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 <peter.hutterer@who-t.net>
|
||||
---
|
||||
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
|
||||
|
@ -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 <peter.hutterer@redhat.com> 1.9.901-3
|
||||
- Fix crasher on first event from tablets not supported by libwacom
|
||||
(#1535755)
|
||||
|
||||
* Fri Feb 02 2018 Peter Hutterer <peter.hutterer@redhat.com> 1.9.901-2
|
||||
- Use autosetup instead of the manual git magic
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user