libinput/SOURCES/0003-Revert-tools-switch-me...

150 lines
5.6 KiB
Diff

From bf1dea1a8e516dd0372c2e7e3c818a05f3777a89 Mon Sep 17 00:00:00 2001
From: Peter Hutterer <peter.hutterer@who-t.net>
Date: Tue, 3 Nov 2020 15:24:23 +1000
Subject: [PATCH libinput 3/4] Revert "tools: switch measure-touch-size to
python-libevdev"
This reverts commit deb759a0699a0ad18a9fa3dda8f1b397e34ae537.
---
tools/libinput-measure-touch-size.py | 79 ++++++++++++++++------------
1 file changed, 44 insertions(+), 35 deletions(-)
diff --git a/tools/libinput-measure-touch-size.py b/tools/libinput-measure-touch-size.py
index 5d98bc28..f974df43 100755
--- a/tools/libinput-measure-touch-size.py
+++ b/tools/libinput-measure-touch-size.py
@@ -28,7 +28,8 @@ import sys
import subprocess
import argparse
try:
- import libevdev
+ import evdev
+ import evdev.ecodes
import pyudev
except ModuleNotFoundError as e:
print('Error: {}'.format(str(e)), file=sys.stderr)
@@ -171,23 +172,32 @@ class InvalidDeviceError(Exception):
pass
-class Device(libevdev.Device):
+class Device(object):
def __init__(self, path):
if path is None:
self.path = self.find_touch_device()
else:
self.path = path
- fd = open(self.path, 'rb')
- super().__init__(fd)
+ self.device = evdev.InputDevice(self.path)
- print("Using {}: {}\n".format(self.name, self.path))
+ print("Using {}: {}\n".format(self.device.name, self.path))
- if not self.has(libevdev.EV_ABS.ABS_MT_TOUCH_MAJOR):
+ # capabilities returns a dict with the EV_* codes as key,
+ # each of which is a list of tuples of (code, AbsInfo)
+ #
+ # Get the abs list first (or empty list if missing),
+ # then extract the touch major absinfo from that
+ caps = self.device.capabilities(absinfo=True).get(
+ evdev.ecodes.EV_ABS, []
+ )
+ codes = [cap[0] for cap in caps]
+
+ if evdev.ecodes.ABS_MT_TOUCH_MAJOR not in codes:
raise InvalidDeviceError("Device does not have ABS_MT_TOUCH_MAJOR")
- self.has_minor = self.has(libevdev.EV_ABS.ABS_MT_TOUCH_MINOR)
- self.has_orientation = self.has(libevdev.EV_ABS.ABS_MT_ORIENTATION)
+ self.has_minor = evdev.ecodes.ABS_MT_TOUCH_MINOR in codes
+ self.has_orientation = evdev.ecodes.ABS_MT_ORIENTATION in codes
self.up = 0
self.down = 0
@@ -239,32 +249,32 @@ class Device(libevdev.Device):
return self.sequences[-1]
def handle_key(self, event):
- tapcodes = [libevdev.EV_KEY.BTN_TOOL_DOUBLETAP,
- libevdev.EV_KEY.BTN_TOOL_TRIPLETAP,
- libevdev.EV_KEY.BTN_TOOL_QUADTAP,
- libevdev.EV_KEY.BTN_TOOL_QUINTTAP]
+ tapcodes = [evdev.ecodes.BTN_TOOL_DOUBLETAP,
+ evdev.ecodes.BTN_TOOL_TRIPLETAP,
+ evdev.ecodes.BTN_TOOL_QUADTAP,
+ evdev.ecodes.BTN_TOOL_QUINTTAP]
if event.code in tapcodes and event.value > 0:
print("\rThis tool cannot handle multiple fingers, "
"output will be invalid", file=sys.stderr)
def handle_abs(self, event):
- if event.matches(libevdev.EV_ABS.ABS_MT_TRACKING_ID):
- if event.value > -1:
- self.start_new_sequence(event.value)
- else:
- try:
- s = self.current_sequence()
- s.finalize()
- print("\r{}".format(s))
- except IndexError:
- # If the finger was down during start
- pass
- elif event.matches(libevdev.EV_ABS.ABS_MT_TOUCH_MAJOR):
- self.touch.major = event.value
- elif event.matches(libevdev.EV_ABS.ABS_MT_TOUCH_MINOR):
- self.touch.minor = event.value
- elif event.matches(libevdev.EV_ABS.ABS_MT_ORIENTATION):
- self.touch.orientation = event.value
+ if event.code == evdev.ecodes.ABS_MT_TRACKING_ID:
+ if event.value > -1:
+ self.start_new_sequence(event.value)
+ else:
+ try:
+ s = self.current_sequence()
+ s.finalize()
+ print("\r{}".format(s))
+ except IndexError:
+ # If the finger was down during start
+ pass
+ elif event.code == evdev.ecodes.ABS_MT_TOUCH_MAJOR:
+ self.touch.major = event.value
+ elif event.code == evdev.ecodes.ABS_MT_TOUCH_MINOR:
+ self.touch.minor = event.value
+ elif event.code == evdev.ecodes.ABS_MT_ORIENTATION:
+ self.touch.orientation = event.value
def handle_syn(self, event):
if self.touch.dirty:
@@ -278,11 +288,11 @@ class Device(libevdev.Device):
pass
def handle_event(self, event):
- if event.matches(libevdev.EV_ABS):
+ if event.type == evdev.ecodes.EV_ABS:
self.handle_abs(event)
- elif event.matches(libevdev.EV_KEY):
+ elif event.type == evdev.ecodes.EV_KEY:
self.handle_key(event)
- elif event.matches(libevdev.EV_SYN):
+ elif event.type == evdev.ecodes.EV_SYN:
self.handle_syn(event)
def read_events(self):
@@ -293,9 +303,8 @@ class Device(libevdev.Device):
print("Place a single finger on the device to measure touch size.\n"
"Ctrl+C to exit\n")
- while True:
- for event in self.events():
- self.handle_event(event)
+ for event in self.device.read_loop():
+ self.handle_event(event)
def colon_tuple(string):
--
2.28.0