Commit graph

1323 commits

Author SHA1 Message Date
Peter Hutterer
08fba7bd96 test: add a test for minimum motion movement
The first motion on a device must have the mimimum movement factor (0.3)

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-03 09:44:04 +10:00
Peter Hutterer
a1feb44836 test: send a single motion event for relative tests only
Since 69449ca854, the minimum deceleration is 0.3 and we don't get a 0 motion
event anymore. We can drop the helper function now too.

What we do in that test instead is pump one relative motion event through
before we start comparing the events, this way our second, third, .. events
will have some acceleration applied and the tests compare more accurate
values.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-03 09:44:04 +10:00
Peter Hutterer
261c779f1c test: add some tests for udev tagging
We can't easily test for DMI matches, but anything that hooks onto pid/vid is
easy to verify for correctness.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-03 09:44:04 +10:00
Peter Hutterer
676be4b944 test: use poll instead of a busy wait
Drop the busy loop we had waiting for an event to appear and just call poll on
the libinput fd.

This actually makes the tests more correct, if we now time out where we didn't
before it means we're not setting the timers correctly.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-02 16:10:41 +10:00
Peter Hutterer
97f447d670 test: up the default test timeout to 10s
3s is too easy to hit on congested systems. 10s is overkill, but it's still
better to pass a test late than having to restart the whole test-suite again.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-02 16:09:13 +10:00
Peter Hutterer
79b7707d76 test: wait for the uinput_monitor on test devices
Set up a udev_monitor before each device creation and wait for the monitor to
notify us of the newly created device. This should take the place of the
various sleep loops  we currently have sprinkled around the code and provide a
reliability when testing.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-02 16:08:56 +10:00
Peter Hutterer
67ebcc3b8a Merge branch 'drop-pointer-normalization' 2015-07-02 13:06:18 +10:00
Peter Hutterer
3928f32281 filter: add a custom low-dpi acceleration
Motion normalization does not work well for devices below the default 1000dpi
rate. A 400dpi mouse's minimum movement generates a 2.5 normalized motion,
causing it to skip pixels at low speeds even when unaccelerated.

Likewise, we don't want 1000dpi mice to be normalized to a 400dpi mouse, it
feels sluggish even at higher acceleration speeds.
Instead, add a custom acceleration method for lower-dpi mice. At low-speeds,
one device unit results in a one-pixel movement. Depending on the DPI factor,
the acceleration kicks in earlier and goes to higher acceleration so faster
movements with a low-dpi mouse feel approximately the same as the same
movement on a higher-dpi mouse.

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

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-02 13:03:43 +10:00
Peter Hutterer
4df1a9b66e tools: add --dpi= arg to ptraccel-debug
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-02 13:03:43 +10:00
Peter Hutterer
40dab334ab filter: pass the DPI to the acceleration filter
Currently unused, but store the ratio of DPI:default DPI for later use.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-02 13:03:43 +10:00
Peter Hutterer
92e415eadd test: add a low-dpi mouse test device
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-02 13:03:43 +10:00
Peter Hutterer
c06d825c53 Drop motion normalization of unaccelerated deltas
This simply doesn't work for low-dpi mice. Normalizing a 400dpi mouse to a
1000dpi mouse forces a minimum movement of 2.5 units and the resulting pixel
jumps. It is impossible for the caller to detect whether the jump was caused
by a single motion or multiple motion events.

This is technically an API break, but not really.

The accelerated data was already relatively meaningless, even if normalized as
the data did not correspond predictably to any input motion (unless you know
the implementation acceleration function in the caller). So we can drop the
mention from there without expecting any ill effects in the caller.

The unaccelerated data was useless for low-dpi mice and could only be used to
measure the physical distance of the mouse movement - something not used in
any caller we're aware of (if needed, we can add that functionality as a
separate call). Dropping motion normalization for unaccelerated deltas also
restores true dpi capabilities to users of that API, mostly games that want to
make use of high-dpi mice.

This is a simplified patch, the normalization is still in place for most of
libinput, it merely carries the original coordinates in the event itself.

In the case of touchpads, the coordinates are unnormalized into the x-axis
coordinate space as per the documentation.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-02 13:03:43 +10:00
Peter Hutterer
6ea69c2b3d filter: reduce deceleration to minimal speeds only
Deceleration at low speeds is intended to enhance precision when moving the
pointer slowly. However, the adaptive deceleration we used was badly
calibrated, at slow-but-normal speeds the pointer became too slow to manouver.

We don't want to drop deceleration completely, the subpixel precision it
provides is useful. And it also helps those that can't move a 1000dpi mouse by
exactly one unit.

Make the adaptive deceleration steeper so it only kicks in at extremely slow
motions and defaults to 1 at anything resembling normal movement (i.e. pointer
moves like the physical device does).

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-02 13:03:43 +10:00
Peter Hutterer
2285217ae1 udev: make a note that hwdb matches are exclusive
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-01 11:13:46 +10:00
Peter Hutterer
a851415c61 test: add the warning to the rules file too
The rules file in /run may be left over after an unclean exit and mess with
things.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-01 11:13:46 +10:00
Peter Hutterer
f0c8286ae8 touchpad: disable trackpoint palm detection on small touchpads
Tested on three laptops here, Lenovo T61, X220 and an HP EliteBook (?), all
with small touchpads. It's hard to have a hand position where the palm touches
the touchpad while using the trackpoint. So we might as well save us the
effort of monitoring events and enabling/disabling it on demand.

As a side-effect this fixes 1233844, but that's more a coincidence.
https://bugzilla.redhat.com/show_bug.cgi?id=1233844

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-01 08:57:18 +10:00
Peter Hutterer
eb4bd799de touchpad: improve trackpoint palm detection responsiveness
The touchpad is disabled for 500ms after a trackpoint event to avoid
erroneous palm touches. This is currently refreshed on every trackpoint event
and thus forces a delay of 500ms when switching between the two.

Instead, reduce the timeout to 300ms but ignore any touches started while the
trackpoint was active (i.e. before the last trackpoint event). A touch started
after the last event is released once the timeout expires.

This is the same logic used for disable-while-typing.

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

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-01 08:57:18 +10:00
Peter Hutterer
081b6b3dff touchpad: always set touch->palm.time on touch begin
We will use this outside of DWT, so set it unconditionally on touch begin.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-01 08:57:18 +10:00
Peter Hutterer
c82ec173bb touchpad: move trackpoint timer stuff into the palm struct
No functional changes, just rearranging where it fits better.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-01 08:57:18 +10:00
Peter Hutterer
c0ef2a172a test: increase the udev init timeout
Hitting this limit too often on congested VMs, so let's increase the sleep
sleep (so the system can get done what needs to be done) and get the whole
timeout from 600ms to 2000ms.

Note: if we really hit 2000ms we may still fail on some tests with the check's
default 3 second timeout.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-01 08:56:54 +10:00
Peter Hutterer
44a1f07a57 evdev: evdev_fix_abs_resolution can be static
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-30 13:32:21 +10:00
Peter Hutterer
438ba0fec3 test: group the parser tests together
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-30 13:32:17 +10:00
Peter Hutterer
7cd6f9780d Add missing copyright header to the udev callout
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-30 13:32:14 +10:00
Peter Hutterer
b344e3e566 touchpad: disable tap drag lock by default
Similar to tapping, it's a feature that is useful but confusing if a user
doesn't know it exists. It makes the touchpad appear laggy and slow to react
in the best case, or appear like a stuck button in the worst case.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-06-29 07:52:41 +10:00
Peter Hutterer
0f623c75b3 Add missing @ingroup tag to the logging priority enum
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-26 14:51:16 +10:00
Peter Hutterer
68f94c6ba4 filter: use a tmp variable for the accel factor
No real effect, just makes the diff for debugging printfs smaller.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-26 11:10:29 +10:00
Peter Hutterer
c902b37a8d tools: don't drop the accelerated deltas in ptraccel-debug
Leftover from the initial (out-of-tree) implementation where we updated motion
in place. That hasn't been true since libinput switched to type-safe
coordinates.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-26 11:10:29 +10:00
Peter Hutterer
7ebb718ee9 evdev: move posting a trackpoint scroll event into a helper
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-26 11:10:28 +10:00
Peter Hutterer
ffaf1f3b72 evdev: log device's DPI setting if any
Makes debugging things easier.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-26 08:18:58 +10:00
Peter Hutterer
8302860451 evdev: read dpi before evdev_configure_device
So we can use to set up accel during evdev_configure_device.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-26 08:15:28 +10:00
Peter Hutterer
0d2c25e123 evdev: store the device dimensions
We use width/height often enough that storing it once is better than
calculating it on each event.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-06-26 06:46:32 +10:00
Gilles Dartiguelongue
387b8057b1 Add missing includes for *stat
Signed-off-by: Gilles Dartiguelongue <eva@gentoo.org>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-25 17:08:32 +10:00
Peter Hutterer
38d59cefff Add a debug_trace() macro for easier debugging
Disabled by default, define DEBUG_TRACE when needed

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-25 17:08:00 +10:00
Peter Hutterer
56264a6ff6 touchpad: fix stuck finger after a click
On a touchpad without resolution, the pinned finger was stuck. The motion
distance scale factor ended up as 0 and the finger never reached the threshold
of 3mm.
int was not the best choice of datatype for a value of 0.007...

Fix the data types for xdist/ydist at the same time, clamping to int may cause
erroneous (un)pinning.

Introduced in 8025b374d5

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

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-25 12:22:43 +10:00
Peter Hutterer
f74769e77e tools: add --grab option
Issues an EVIOCGRAB on the openend devices, providing exclusive access. Makes
it easier for debugging, so moving the pointer doesn't accidentally trigger
other stuff.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-24 15:19:33 +10:00
Peter Hutterer
b7c414558d tools: pass a context around as userdata
We need the options during open_restricted(), so instead of the caller just
passing in a custom userdata, let them wrap it into a tools_context.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-24 15:15:15 +10:00
Peter Hutterer
41ad79f8d8 tools: move the interface into the shared code
No need to duplicate this atm

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-24 15:15:07 +10:00
Peter Hutterer
6b2afee368 tools: remove obsolete comments
With the OPT_foo enums, these comments aren't necessary anymore

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-24 15:15:05 +10:00
Peter Hutterer
8baf05ebdd Fix an indentation issue
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-24 12:14:09 +10:00
Peter Hutterer
abc8c0d6c2 touchpad: reduce edge scroll motion threshold to 3mm
Reduce the dead zone/initial jump

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

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-06-24 08:14:33 +10:00
Peter Hutterer
f783dae0a7 touchpad: only send most recent edge delta when triggering threshold
When edge scrolling is triggered by exceeding the motion threshold (5mm) we
sent the whole delta as the first scroll event, causing a big jump.

Instead, send only the current delta. This effectively introduces a 5mm dead
zone when edge scrolling, still better than the jump.

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

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-06-24 08:14:33 +10:00
Peter Hutterer
3195b95d1d test: add non-draglock test and rename draglock-dependent tests
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-06-23 14:24:29 +10:00
Peter Hutterer
16107e1862 tools: hook up drag lock config
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-06-23 14:24:29 +10:00
Peter Hutterer
875e1d1b10 touchpad: hook up drag lock configuration
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-06-23 14:24:29 +10:00
Peter Hutterer
75581d5829 Add configuration interface for tap drag-lock
In some applications, notably Inkscape, where it is common to frequently drag
objects a short distance the default to drag-lock always-on is frustrating for
users.
Make it configurable, with the current default to "on".
New API:
  libinput_device_config_tap_set_drag_lock_enabled
  libinput_device_config_tap_get_drag_lock_enabled
  libinput_device_config_tap_get_default_drag_lock_enabled

Any device capable of tapping is capable of drag lock, there is no explicit
availability check for drag lock. Configuration is independent, drag lock may
be enabled when tapping is disabled.

In the tests, enable/disable drag-lock explicitly where the tests depend
on it.

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

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-06-23 14:24:29 +10:00
Peter Hutterer
3fcdba6ca6 test: replace tap config with helper function
No functional change, other than that we check for status codes now too.
In tests that don't specifically check the interface itself, a short
enable_tap() or disable_tap() is a lot more obvious to parse for the reader.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-06-23 14:24:29 +10:00
Peter Hutterer
b1fc392268 udev: prepend the libinput group with the product string
Multiple devices plugged into the same USB hub have the same
PHYS path and are assigned to the same group.

Prepend the content of the PRODUCT env to the phys path, this at least ensures
that different devices are never grouped together.

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

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-06-23 09:07:44 +10:00
Peter Hutterer
f3d6fdae84 Extend CODING_STYLE with the if/else requirements
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-23 07:45:36 +10:00
Peter Hutterer
1f4dd9985a tools: drop superfluous linebreaks in ptraccel-debug
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-22 16:00:12 +10:00
Peter Hutterer
d41acdbbce configure.ac: libinput 0.18.0
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-22 12:21:28 +10:00