Commit graph

1474 commits

Author SHA1 Message Date
Peter Hutterer
2ee2bebb34 test: don't try to print axis values that aren't set
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-08-05 11:28:32 +10:00
Peter Hutterer
254f87564f filter: fix acceleration threshold assignment
The new values were in units/us and didn't make the switch back to ms in
8a6825f160.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2015-08-04 16:11:01 +10:00
Peter Hutterer
317cd252be middle-button: don't call libinput_now() in the timeout handler
The argument has "now" already

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-08-04 15:44:39 +10:00
Peter Hutterer
603ac39e3b configure.ac: libinput 0.21.0
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-08-04 10:26:43 +10:00
Peter Hutterer
e625d2d24b udev: include new udev rule in EXTRA_DIST
Fixes distcheck

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-08-04 10:26:43 +10:00
Peter Hutterer
f03f447590 touchpad: always enable the bottom-most area for thumb detection
If the touchpad is higher than 50mm, enable bottom area thumb detection. This
only applies to the bottom-most 8mm and only if the touch remains unmoving in
that area.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-08-04 07:37:26 +10:00
Peter Hutterer
d823a3da0a gestures: reduce 2fg scroll timeout to 500ms
Holding the fingers in place without moving for 500ms is long enough to lock
in a scroll gesture, especially while we're still waiting for the rest of the
stack to expose pinch gestures.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-08-04 07:37:11 +10:00
Peter Hutterer
441db3afb1 doc: add a page about touchpads
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-08-03 14:28:43 +10:00
Peter Hutterer
2fdf71f82b Merge branch 'disable-gestures-semi-mt' 2015-08-03 11:40:37 +10:00
Peter Hutterer
7013a20f8b touchpad: pretend the jumpy semi-mt touchpad is a single-touch touchpad
The first finger is accurate, it's just the second finger that is imprecise,
so we can't handle it as a true touch. Instead, revert the device back to
being a single-touch touchpad and use the fake touch bits for second finger
handling.

Two-finger scrolling thus becomes usable though we will lose out on
other features like thumb detection. Useful scrolling trumps that though.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-08-03 11:40:29 +10:00
Peter Hutterer
6933062dab touchpad: elantech touchpads can use a 2mm gesture motion threshold
Unlike ALPS and Synaptics semi-mt touchpads, the Elantech touchpads appear to
be precise enough to allow a smaller motion threshold before we decide on the
type of gesture (pinch vs scroll).

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

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-08-03 11:40:29 +10:00
Peter Hutterer
96d0e06f13 touchpad: disable gestures on Synaptics semi-mt touchpads
Follow-up to eb146677e, if we disable 2fg scrolling on those touchpads we
should also disable gestures. The data doesn't magically become more useful.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-08-03 11:40:17 +10:00
Peter Hutterer
6295118c8e touchpad: make gestures optional
Not all multi-finger touchpads are able to reliably produce gestures, so make
it optional. This patch just adds a boolean (currently always true) that gets
set on touchpad init time, i.e. it is not run-time configurable.

Three and four-finger gestures are filtered out in gesture_notify(), if the
cap isn't set the event is discarded.

For two-finger gestures we prevent a transition to PINCH, so we don't
inadvertently detect a pinch gesture and then not send events. This way, a 2fg
gesture is always scroll.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-08-03 11:40:12 +10:00
Peter Hutterer
cbc0b20793 test: fix test case failure caused by belated timer
See 5cec16eede

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-08-03 11:19:54 +10:00
Peter Hutterer
8a6825f160 filter: move the pointer acceleration profiles back to units/ms
There is no need here to use µs since we're just handling speeds/thresholds,
not actual events where a ms granularity can be too high.

Moving back to ms lets us drop a bunch of zeroes that clutter up the code, and
since the acceleration functions are a bit magic anyway, having the various
1000.0 factors in there makes it even less obvious.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2015-08-03 11:19:54 +10:00
Peter Hutterer
26c8f2c442 filter: fix x230 acceleration function for the ms→us change
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2015-07-31 14:49:30 +10:00
Peter Hutterer
424a172b1b tools: fix the velocity range for printing the ptraccel profile
Now using µs.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2015-07-31 14:48:13 +10:00
Peter Hutterer
7b6bd641c7 touchpad: move CAP_GESTURE assignment to the touchpad code
That's where we set the pointer cap too.
No functional changes.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-31 09:14:27 +10:00
Peter Hutterer
2dd1b3ead0 test: move the helper functions to the litest.h file
To avoid duplication

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-31 09:14:21 +10:00
Peter Hutterer
a12a39fb82 doc: add a page on how to report bugs
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-30 13:14:25 +10:00
Peter Hutterer
6b59b4273c touchpad: drop distance threshold to detect pinches
This gives us too many false positives of 2fg scroll being detected as pinch
gesture. Reporter in [1] uses index+ring finger and thus exceeds the distance
easily (that's admittedly a special case).

This is worsed by the lack of a client stack that handles the gestures. User's
don't see that they're inadvertently performing a gesture, they just see 2fg
scroll not working.

Drop the distance for now, once we have a ubiquitous client stack we can
revisit and bring it back.

[1] https://bugzilla.redhat.com/show_bug.cgi?id=1246868

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-30 10:52:15 +10:00
Peter Hutterer
0d40aefeca gestures: check ntouches, not just num_slots for the number of fingers
We need to check fake fingers as well as real fingers, especially for
two-finger scrolling on single-touch touchpads with BTN_TOOL_DOUBLETAP.

https://bugzilla.redhat.com/show_bug.cgi?id=1246651

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-30 10:35:55 +10:00
Peter Hutterer
bae79eff3c test: abort if we trigger a libinput bug message
Only abort on client or libinput bugs, skip over kernel bugs.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2015-07-29 19:53:39 +10:00
Peter Hutterer
dfb442be4e test: add missing libinput_dispatch() before timeouts
see 5cec16eede.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2015-07-29 19:53:39 +10:00
Peter Hutterer
3bf404da96 touchpad: update the thumb move timeout to µs
And add a #define for it so we stop hiding it.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2015-07-29 11:00:17 +10:00
Peter Hutterer
5cec16eede test: add a bunch of libinput_dispatch() before timeout calls
98346f6a1a added a warning about timeouts expiring before now. Those warnings
are triggered by a bunch of tests where we have events, then a timeout, then a
libinput_dispatch().

All these are bugs in the test, since we can't guarantee the order of fds (and
thus which fd the events are pulled off first) it's just lucky that they worked.
Insert the required libinput_dispatch() calls.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2015-07-29 09:52:28 +10:00
Peter Hutterer
42c25dcb89 touchpad: log when thumb detection is enabled on a device
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-29 08:59:25 +10:00
Jonas Ådahl
091206c907 Ignore test devices for libinput contexts not run from the test suite
Add a LIBINPUT_TEST_DEVICE udev parameter to test devices created by
the test suite. When an application tries to add such a device to the
path backend or when the udev backend discovers such a device, it will
be ignored. Only the context when run via the test suite will actually
handle these devices.

Doing this will enable a user to run the libinput test suite on a system
running libinput without having the test suite devices interfering with
the actual system.

Note that X.org users running an input device driver that is not the
libinput X input driver will still need to manually configure the X
server to ignore such devices (see test/50-litest.conf).

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-28 17:42:32 +08:00
Jonas Ådahl
5cb1cb47f7 test: Make udev path variables more explicitly named
This is to make room for more types of rules files.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-28 17:42:32 +08:00
Jonas Ådahl
aa5f55149b Change to micro seconds for measuring time internally
In order to provide higher precision event time stamps, change the
internal time measuring from milliseconds to microseconds.
Microseconds are chosen because it is the most fine grained time stamp
we can get from evdev.

The API is extended with high precision getters whenever the given
information is available.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-28 17:42:32 +08:00
Jonas Ådahl
98346f6a1a timer: Warn about negative timer offsets
Even if it may be caused by extreme stalls, warn if the timer was set to
be triggered even before 'now' when it actually is triggered, as it is
more likely a programming error.

Part of the reason for this commit was not to convert the unsigned int
to a signed int (which abs() does).

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-28 16:15:49 +08:00
Jonas Ådahl
6e26493272 test/pointer: Don't rely on velocities in direction change test
We currently rely on an extra millisecond being added by the filter
code to get a velocity that are small enough to not hit the max
acceleration limit. If this arbitrary millisecond is changed (for
example by changing the internal time measurment to microseconds and
adding just a microsecond instead), the velocity may change so that the
maximum or minimum acceleration is always hit.

Adding a delay to the test won't work either since it would not only rely
on ending up within the acceleration limits but there would also be an
non-deterministic actual delay causing the velocity of the movement
after the direction change to be potentially larger than the movement
in the original direction due to the actual time delta in libinput will
not always be 1ms.

To fix the test to not rely on any artificial delays in the filter code
nor any non-deterministic delays in the test, lets just test that the
direction change of the hardware events resulted in a direction change
of the libinput motion events.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-28 16:15:46 +08:00
Jonas Ådahl
85f7bad759 Always use uint64_t for internal timestamp values
In most places we use 64 bit unsigned integers; lets be consistent and
use it everywhere.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-28 16:15:43 +08:00
Jonas Ådahl
4bd1d5c6d1 test: Use ck_assert_double_ for checking doubles in some places
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-28 16:15:05 +08:00
Peter Hutterer
eb146677eb touchpad: disable 2fg scrolling on Synaptics semi-mt touchpads
These touchpads have a terrible resolution when two fingers are down, causing
scrolling to jump around a lot. That then turns into bug reports that we can't
do much about, the data is simply garbage.

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

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-27 19:34:42 +10:00
Peter Hutterer
316f30d2f2 touchpad: don't check clickfinger distance for three fingers
It's reasonable to expect a thumb (or the other hand's index finger) to click
a button while a finger is down for movement. It's less reasonable to expect
this when two fingers are interacting with the touchpad, or when two fingers
click the touchpad (even on a large touchpad that's an awkward position).

Simplify the clickfinger detection mechanism - if we have three touches down,
it's always a three-finger click. Two fingers may be a right click or a index
+ thumb click.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-27 11:58:49 +10:00
Peter Hutterer
ed1aee6061 test: don't leak the custom udev rule path for devices with custom creates
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-27 11:14:52 +10:00
Peter Hutterer
b4f27c43d9 test: rename 2fg natural scroll test to be more obvious
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-27 10:40:07 +10:00
Peter Hutterer
a5e2e23870 test: enable 2fg scrolling before tests that rely on it
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-27 10:39:21 +10:00
Peter Hutterer
f2aefb9942 test: filter out edge-scroll-only touchpads from 2fg scroll tests
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-27 10:39:06 +10:00
Peter Hutterer
be857f1e28 touchpad: don't log a bug for Apple's one-button touchpads
Apple used to have a single-button touchpad that was not a clickpad. Skip
logging an error for that one.

Found in https://bugzilla.redhat.com/show_bug.cgi?id=1246651.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-27 10:07:45 +10:00
Peter Hutterer
988f31fc4a Merge branch 'thumb-detect-improvements' 2015-07-24 09:19:08 +10:00
Peter Hutterer
2c78149844 touchpad: put a movement threshold on thumb detection
If a thumb moves around, it's not resting and we should consider it a normal
touch.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-24 08:50:23 +10:00
Peter Hutterer
2dbf998aa8 touchpad: a pressure change alone needs touch processing, mark as dirty
A thumb may not move, but may change pressure so we need to process
accordingly.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-24 08:50:22 +10:00
Peter Hutterer
303565c329 test: fix default axis value assignment
Was assigned to -1 if no custom axes were provided.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-24 08:50:22 +10:00
Peter Hutterer
8ba5b9cbf9 test: only run 3-slot test for touchpads with three slots
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-24 08:50:22 +10:00
Peter Hutterer
689632cd0a touchpad: only try thumb detection in the lowest 15/8mm
That's the most likely area it will be resting in, if it's sitting anywhere
above that it's likely part of an interaction.

A thumb in the lowest 15mm needs to trigger the pressure threshold before it's
labelled a thumb. A thumb in the lowest 8mm is considered a thumb if it
remains there for 300ms. Regardless of the pressure, since we can't reliably
get pressure here. If a thumb moves out of the area, or starts outside of that
area it is never a thumb.

If edge scrolling is enabled, the 8mm threshold is ineffective since we'll
have normal interaction in that zone for horizontal scrolling.

The thumb tests now require all touchpads to be switched to clickfinger, if we
test for thumb detection on the bottom of the pad we won't get expected
motion events due to the software button area.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-24 08:50:17 +10:00
Peter Hutterer
5571f2d2cc touchpad: hook up disable-while-typing configuration
This is not a frequent toggle, so we don't need to jump through too many hoops
here. We simply enable/disable on command and once any current timeouts have
expired the new setting takes effect.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-24 08:49:25 +10:00
Peter Hutterer
55974dcac5 Add a configuration interface for enabling/disabling disable-while-typing
DWT can interfere with some applications where keyboard and touchpad use at
the same time is common, e.g. games but also anything that requires a
combination of frequent pointer motion and use of keyboard shortcuts.

Expose a toggle to disable DWT where needed.

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

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-24 08:49:23 +10:00
Peter Hutterer
9727b703c3 touchpad: drop TOUCHPAD_HAS_TRACKPOINT_BUTTONS parsing
This was a stopgap measure to support the Lenovo Carbon X1 3rd and the Lenovo
*50 series. These devices have the trackpoint buttons wired to the touchpad
and thus trackpoint events came from the touchpad device.

This was fixed in the kernel commit cdd9dc195916ef5644cfac079094c3c1d1616e4c,
the systemd hwdb to set this property was removed in 05304592457e01 so nothing
sets this property anymore. Drop it.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-24 08:48:20 +10:00