Commit graph

1852 commits

Author SHA1 Message Date
Peter Hutterer
7899a6cf8d tools: add support for tablet relative events to the event-gui
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Jason Gerecke <jason.gerecke@wacom.com>
2016-01-22 16:16:55 +10:00
Peter Hutterer
7164d6eff5 tablet: hook up relative motion events
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Jason Gerecke <jason.gerecke@wacom.com>
2016-01-22 16:16:55 +10:00
Peter Hutterer
108a191a3e tablet: add support for relative x/y motion deltas
Instead of an explicit tablet mode that device must be changed into, let the
caller decide which coordinates are preferred. The tablet mode may be
application-specific and usually depends on the tool as well.

This patch adds an interface to get a motion delta for the x/y axes in
pixel-like coordinates. libinput provides some magic to convert the tablet
data into something that resembles pixels from a mouse motion.
For unaccelerated relative motion, the caller should use the mm values from
the tablet and calculate deltas manually.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Jason Gerecke <jason.gerecke@wacom.com>
2016-01-22 16:16:55 +10:00
Peter Hutterer
91a568d1a1 Merge branch 'master' into tablet-support 2016-01-19 12:02:51 +10:00
Peter Hutterer
999cbc8933 touchpad: drop the model detection - write-only value
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2016-01-18 16:44:28 +10:00
Peter Hutterer
f5200c5325 tablet: drop delta array, provided by the tablet_axis struct now
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Jason Gerecke <jason.gerecke@wacom.com>
2016-01-15 10:07:18 +10:00
Peter Hutterer
d524313d2b tablet: use a struct rather than a double array for axis values
Makes the code less generic, but more expressive. No visible functional
changes.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Jason Gerecke <jason.gerecke@wacom.com>
2016-01-15 10:07:18 +10:00
Peter Hutterer
b1d6c5aa54 tools: share the axis and tip code where appropriate
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Jason Gerecke <jason.gerecke@wacom.com>
2016-01-15 10:07:05 +10:00
Peter Hutterer
3e6579998a tools: get pressure/distance/tilt from a tip event too
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Jason Gerecke <jason.gerecke@wacom.com>
2016-01-15 10:07:05 +10:00
Peter Hutterer
d5a07eb00b tablet: allow the various get_<axis> on tablet button events
There's no reason to prevent this for button events. Unlike the pointer
which is a relative device a tablet is (usually) a device with a lot of state.
Caller code that handles axes is likely shared between the various events,
treating button events separately here doesn't get us any benefit.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Jason Gerecke <jason.gerecke@wacom.com>
2016-01-15 10:07:05 +10:00
Peter Hutterer
556aac04b5 touchpad: disable MT for elantech semi-mt touchpads
When three fingers are set down on the touchpad, one finger tends to get a 0/0
coordinate, triggering palm detection in the upper left corner. Handle this
like the jumping semi-mt touchpads and disable MT handling and instead
just rely on the x/y axis and the BTN_TOOL_* events.

https://bugs.freedesktop.org/show_bug.cgi?id=93583

This kernel patch is required:
https://lkml.org/lkml/2016/1/11/171

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2016-01-14 09:51:56 +10:00
Peter Hutterer
41cc9053dd doc: add section names to motion normalization subheaders
Otherwise the first word is used as section header and discarded from the
output.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2016-01-13 14:11:28 +10:00
Peter Hutterer
ea8fff291b touchpad: whitespace fix
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2016-01-13 14:11:28 +10:00
Peter Hutterer
52b8874ecc touchpad: drop outdated comment
Obsolete comment since 4ca70c813f, we rely on
the udev hwdb to set the resolution for us.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2016-01-12 12:16:25 +10:00
Peter Hutterer
988cfda42c evdev: only reject devices with missing MT x/y if they're MT devices
A fake MT device may have ABS_MT_POSITION_X but not Y. In this case we don't
care, because we don't handle those axes anyway.

http://bugs.freedesktop.org/show_bug.cgi?id=93474

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2016-01-12 09:07:36 +10:00
Peter Hutterer
3c5483ac16 tablet: don't set a pressure offset of 0
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Jason Gerecke <jason.gerecke@wacom.com>
2016-01-11 15:17:46 +10:00
Peter Hutterer
1a99977ca0 tablet: a tip event can replace an axis event
When we're only dealing with BTN_TOUCH we can make the tip event independent
of the axis event. Now that we handle pressure thresholds to trigger tip state
this does not work, we'd have to send an axis event with the new pressure and
then a tip event. Since the pressure triggers the tip event this seems
disconnected.

Make the tip event officially capable of carrying axes. A caller can then
decide how to forward this to the next layer.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Jason Gerecke <jason.gerecke@wacom.com>
2016-01-11 15:17:46 +10:00
Peter Hutterer
96fbf84862 tablet: add pressure threshold handling
On tablets with ABS_PRESSURE use a pressure value to determine tip state, not
BTN_TOUCH. This enables us (down the road) to have device-specific pressure
thresholds. For now we use a 5% default for all devices.

The threshold is a range, if we go past the upper range we initiate the tip
down, if we go below the lower range we release the tip again.

This affects two current tests:
* Once we have pressure offsets and pressure thresholds, we're biased towards
pressure. So we can only check that distance is zero when there is a pressure
value, not the other way round.
* When the pressure threshold is exceeded on proximity in with a nonzero
distance, we can only warn and handle the pressure as normal. Since this is a
niche case anyway anything fancier is likely unnecessary.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Jason Gerecke <jason.gerecke@wacom.com>
2016-01-11 15:17:46 +10:00
Peter Hutterer
8d79b718fd test: fix a bunch of tablet tests for pressure threshold introduction
Preparation work for a pressure threshold where we can't just send a BTN_TOUCH
and expect it to trigger the tip event. So the event sequence now needs to
resemble the right order so the threshold will be triggered.

In some cases requires processing an axis event before the tip event. That
behavior will be changed in a follow-up commit.

It also requires that all tablets set ABS_PRESSURE on proximity in.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Jason Gerecke <jason.gerecke@wacom.com>
2016-01-11 15:17:46 +10:00
Peter Hutterer
d51c8f9420 tablet: always set the pressure offset
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Acked-by: Jason Gerecke <jason.gerecke@wacom.com>
2016-01-11 15:17:46 +10:00
Peter Hutterer
a28c198e2a tablet: whitespace fix
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2016-01-11 15:15:20 +10:00
Peter Hutterer
b71aa64fbf doc: fix two grammar issues "of tablet tool" -> "of the tablet tool"
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2016-01-11 15:15:19 +10:00
Peter Hutterer
fec99a28e3 tools: print the button name too, not just the code
new output:
event4 	POINTER_BUTTON    +0.84s	BTN_RIGHT (273) released, seat count: 0

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2016-01-11 10:11:54 +10:00
Caibin Chen
b3f11180e3 touchpad: fix DWT pairing for Macbook Pro 2015
Label internal keyboards through the udev hwdb and only pair the internal
(usb) Apple touchpads with those keyboards labelled as such.

https://bugs.freedesktop.org/show_bug.cgi?id=93367

Co-authored-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2016-01-11 10:11:32 +10:00
Peter Hutterer
0b124a1a5d tablet: insert "STATE" into proximity/tip states
Makes it even longer, but at least it's consistent with button and key state.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jason Gerecke <jason.gerecke@wacom.com>
2016-01-06 11:02:40 +10:00
Peter Hutterer
c5b87828ee doc: add missing tip event to the allowed set of events
We can call the various has_changed() functions on a tip event.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2016-01-05 13:58:54 +10:00
Peter Hutterer
8f0016ba8a doc: fix and improve the tablet documentation
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2016-01-05 13:58:54 +10:00
Peter Hutterer
665daba9a9 doc: improve absolute axis documentation a bit
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2016-01-05 12:35:49 +10:00
Peter Hutterer
9114054fa2 tablet: explicitly set the tip state on the proximity event
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-12-23 13:22:56 +10:00
Peter Hutterer
6098655cfa test: fix a bunch of tablet tests to assume, rather than wait for events
litest_wait_for_event_of_type() skips all other events in the queue before the
one we want. This isn't appropriate in most cases, and unless we're dealing
with timeouts we should assume that a certain sequence triggered a specific
event rather than waiting some time for it to trigger.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-12-23 13:22:53 +10:00
Peter Hutterer
0319ee1d33 tablet: split sanitize_tablet_axes up into two helpers
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-12-23 09:59:35 +10:00
Peter Hutterer
67e0b232a0 Add event debugging to libinput_post_event
Print the type of event when it is queued up internally. This makes it a lot
easier to associate evdev events with the libinput event queued up and does
not depend on the caller calling libinput_dispatch().

Since this should only be used during development, hide it behind an if 0.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-12-23 09:59:35 +10:00
Peter Hutterer
77c1c75a64 test: use the litest_axis_set_value helper
Should've been part of 2f481ba4a2 during rebasing.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-12-23 09:53:21 +10:00
Peter Hutterer
3a16203a34 test: add two more tests for correct button sequence on proximity
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-12-23 09:15:36 +10:00
Peter Hutterer
2f481ba4a2 tablet: handle custom proximity handling
For the puck/lens cursor tool we need to artificially reduce proximity
detection. These tools are usually used in a relative mode (i.e. like a mouse)
and thus require lifting and resetting the tool multiple times to move across
the screen. The tablets' distance detection goes too far, requiring the user
to lift the device several cm on every move. This is uncomfortable.

Introduce an artificial distance threshold for the devices with the default
value taken from the X.Org wacom driver. If a tool is in proximity but outside
of this range, fake proximity events accordingly.

If a button was pressed while we were out of range we discard that event and
send it later when we enter proximity again.

This is the simple implementation that only takes one proximity out value (the
one from the wacom driver) and applies it to all. Those devices that support a
button/lens tool and have a different default threshold are well out of date.

Reviewed-by: Hans de Goede <hdegoede@redhat.com>

[rebased, tests updated for new axis percentage behavior (8d76734f)]

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-12-23 09:15:36 +10:00
Peter Hutterer
c124209cad tablet: drop unused argument from tablet_mark_all_axes_changed
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-12-23 09:15:36 +10:00
Peter Hutterer
cd36b44b9b tablet: invert tilt axes when left-handed is enabled
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-12-23 08:08:06 +10:00
Peter Hutterer
cbb9e9e809 tablet: add libinput_tablet_tool_is_unique()
For checking if a tablet tool can be uniquely identified by libinput. In
practice this means checking for a nonzero serial number, but let's not
restrict ourselves to allowing just that.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-12-23 07:55:11 +10:00
Peter Hutterer
7309fd0ed3 tablet: simplify marking axes as changed
The only time we need this is on proximity in, so move it to where we handle
that to have better locality. And rather than looping through and checking
each bit, just memcpy the axis capabilities, because by definition they
represent the set of axes that can possibly change.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-12-23 07:33:39 +10:00
Peter Hutterer
c39a91200e tablet: don't mark all axes changed on init
This will be set when the tool comes into proximity later.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-12-23 07:33:39 +10:00
Peter Hutterer
53ac112d6c tablet: split out axis handling into helper functions
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-12-23 07:33:39 +10:00
Peter Hutterer
fa71278c19 tablet: store the wheel delta in the normal axes
Now that we don't provide an API anymore to access the absolute value of the
wheel and the axes are handled separately, we can safely store the wheel delta
in the normal axis array.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-12-23 07:33:39 +10:00
Peter Hutterer
67220c643f tablet: simplify check for testing if an axis update is needed
We know when one of the bits is set we need to send an event

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-12-23 07:33:39 +10:00
Peter Hutterer
c8a99cdf10 tablet: simplify check for testing if an axis update is needed
We know when one of the bits is set we need to send an event

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-12-23 07:33:39 +10:00
Peter Hutterer
ea07cbcd89 tablet: unroll the tablet axis processing loop
Process the axes explicitly, rather than having a loop that needs special
casing for most axes anyway. And since we do the axes one-by-one, we can use
the evdev axis code directly rather than the axis_to_evcode helper.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-12-23 07:33:39 +10:00
Peter Hutterer
9fd0fb0df8 tablet: dump deltas, replace it with a single wheel_delta variable
The wheel is the only one axis that has actual deltas, all others have
straightforward deltas that we don't need to care about, the caller can
calculate those where needed.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-12-23 07:33:39 +10:00
Peter Hutterer
d5e18a8e64 tablet: dump deltas_discrete, replace with a single wheel_discrete variable
Only the wheel has a discrete value, no need to keep arrays for a single
value.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-12-23 07:33:39 +10:00
Peter Hutterer
aaac47d442 test: add litest_axis_set_value helper function
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-12-23 07:33:11 +10:00
Peter Hutterer
a340736e9b configure.ac: libinput 1.1.4
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-12-22 11:18:07 +10:00
Peter Hutterer
7ca6a7b13c doc: add missing @config tag to libinput_config_send_event_modes
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-12-22 11:04:15 +10:00