Commit graph

87 commits

Author SHA1 Message Date
Peter Hutterer
84318021c0 doc: add a diagram for evemu and note that libinput doesn't recordings
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-08-24 09:36:22 +10:00
Jason Gerecke
7095b765ac doc: fix more typos
Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-08-22 16:03:29 +10:00
Andreas Pokorny
d0ae1d99b3 doc: ellipse instead of ellipsis
Signed-off-by: Andreas Pokorny <andreas.pokorny@canonical.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-08-21 11:44:25 +10:00
Peter Hutterer
5311d76ec1 doc: fix typos
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-08-17 16:26:43 +10:00
Peter Hutterer
9424fb6f99 doc: add pointer acceleration documentation
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2015-08-12 14:06:00 +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
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
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
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
e3c9106090 doc: use bootstrap for doxygen styling
Makes the documentation less of an eyesore.

Header/footer from:
https://github.com/Velron/doxygen-bootstrapped, Apache-licensed

Bootstrap style from:
https://bootswatch.com/paper/, MIT licensed

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-16 14:15:19 +10:00
Peter Hutterer
0172bfddbd doc: strip doxygen file from all default values
Only keep those that we changed locally, which makes it much easier to detect
what we're actually changing.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-16 11:10:22 +10:00
Peter Hutterer
1ff5955c65 doc: add a page about the available tools
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-16 10:58:04 +10:00
Peter Hutterer
17ca33fa55 doc: group the "related pages" by general topic
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-16 10:58:04 +10:00
Peter Hutterer
a4f5abd18e evdev: use LIBINPUT_ATTR_SIZE_HINT for resolutions
Touchpads, notably Elantech, ALPS and bcm5974 don't provide x/y resolution
until recent generations.
Add a new property, LIBINPUT_ATTR_SIZE_HINT, that provides size information to
libinput. Note that this property *does not* override true resolution values,
it is only used when the resolution is missing. It is used merely as an
approximate size hint.

If the resolution for a specific device is known it should be added to the
udev hwdb so it can be set globally. See the bcm5974 entries here:
http://cgit.freedesktop.org/systemd/systemd/tree/hwdb/60-evdev.hwdb.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-14 10:12:12 +10:00
Peter Hutterer
4a463ca702 touchpad: work thumb detection into the tap state machine
Most thumbs are detected a few events into the sequence. Work this into parts
of the tapping state machine. Only the most common use-case is handled here -
if the first finger ends up being marked as a thumb, we return to the idle
state and ignore that touch sequence.

At any other state, we handle thumbs like any other finger.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-09 11:27:53 +10:00
Peter Hutterer
abff4a1c24 touchpad: allow edge scrolling on clickpads
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-07-09 11:24:17 +10:00
Peter Hutterer
9129a20014 doc: add "mouse is too fast" to the FAQ
And reference libevdev's mouse-dpi-tool while we're at it.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-07 07:41:03 +10:00
Peter Hutterer
89d3b7bc58 doc: add documentation for touchpad gestures
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-07-06 14:09:33 +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
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
d698f1b12f doc: make horizontal scrolling a separate section
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-10 07:56:57 +10:00
Peter Hutterer
91c4770ce6 doc: provide an outline of which scroll method is available where
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-10 07:56:05 +10:00
Peter Hutterer
d29f17190c doc: add a note that middle-button dragging is not possible on sticks
Just to have something to point bug reporters to.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-10 07:45:39 +10:00
Peter Hutterer
df83144457 touchpad: impose maximum distance limits on clickfingers
A common use-case for clickfinger is to use the index finger for moving the
pointer, then triggering the click with a thumb. If the index finger isn't
lifted before the click this counted as two-finger click.

To avoid this, check the distance between touches on the touchpad (on
touchpads reporting resolution values anyway). If the touches are too far
apart, don't count them together (or specifically only count those close
enough together as multi-finger).

The touch area is uneven, it's wider than high. Spreading fingers horizontally
is more common and this also makes it easier to rule out thumbs which tend to
be well below the fingers.

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

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-06-03 14:43:58 +10:00
Peter Hutterer
9d84dddf91 doc: add a graphic to explain tap-n-drag
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-02 15:47:33 +10:00
Peter Hutterer
def69068a8 doc: add a FAQ page
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-01 15:43:58 +10:00
Peter Hutterer
9883735c1c README: add two diagrams to outline the stack
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-06-01 15:43:36 +10:00
Peter Hutterer
e3673cc346 doc: improve the T440 documentation a bit
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-05-28 11:55:59 +10:00
Peter Hutterer
182290c154 doc: add illustrations for clickfinger and software button behavior
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-05-28 11:16:29 +10:00
Peter Hutterer
2af226f893 doc: add a blurb about scroll sources to the scrolling docs
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-05-28 10:00:01 +10:00
Peter Hutterer
0dc058a0c7 touchpad: touches after the last key press can be released
The current code labels a touch as palm if it started within the typing
timeouts. To move the pointer even after the timeout expires, a user has to
lift the finger which is quite annoying and different to the old synaptics
driver behaviour (which had a simple on/off toggle on whether to let events
through or not).

Be smarter about this: if a touch starts _after_ the last key press event,
release it for pointer motion once the timeout expires. Touches started before
the last key press remain labelled as palms. This makes it possible to rest
the palm on the touchpad while typing without getting interference but also
provides a more responsive UI when moving from typing to using the touchpad
normally.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Tested-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-05-27 17:38:25 +10:00
Peter Hutterer
fcd1cbe5e5 doc: drop leftovers of Check's selective test running
CK_RUN_CASE and CK_RUN_SUITE still work because we're still using check
underneath, but it's better to use the arguments.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-05-22 08:45:35 +10:00
Peter Hutterer
f3947c0eb9 test: add --filter-group argument to match test groups (suites)
Same as CK_RUN_SUITE, but supports fnmatch-like globs

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-05-22 08:45:35 +10:00
Peter Hutterer
538e98d46f test: add --filter-device argument
Similar to the CK_RUN_CASE environment variable, but it does support
fnmatch()-style wildcards, e.g.

	./test/test-touchpad --filter-device="synaptics*"

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-05-22 08:45:35 +10:00
Peter Hutterer
f3d37d9653 test: add filtering to litest framework
Complementary to CK_RUN_SUITE and CK_RUN_CASE, this filters on actual test
function names with a simple fnmatch.

./test/test-touchpad --filter-test="*1fg_tap*"

Most of this patch is renaming litest_add_* to _litest_add_* so we can use the
macros to get at the function names.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-05-22 08:45:35 +10:00
Peter Hutterer
42fa56c9ee doc: clarify a comment what a "no device" test case means
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-05-20 13:06:24 +10:00
Peter Hutterer
d05363316c test: parse the LITEST_VERBOSE environment variable
--verbose only works when running a specific test, sometimes we need make
check to be more verbose. Set this by default for make check, the log becomes
a lot more expressive that way

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-05-19 10:49:49 +10:00
Peter Hutterer
6acd97457f doc: add some documentation for disable-while-typing
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-05-18 15:16:33 +10:00
Velimir Lisec
1ab385bc83 touchpad: end tap-and-drag with an extra tap
Currently for the tap-and-drag gesture to end user has to wait for a
timeout to expire. Make it possible to end the drag gesture by just tapping.

The allowed finger sequences to start and end a drag are thus:
tap, down, .... move ...., up  <wait for timeout>
tap, down, .... move ...., up, tap

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

Signed-off-by: Velimir Lisec <lisec.velimir@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>

State diagram changes and a doc change squashed in.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-05-18 14:10:17 +10:00
Peter Hutterer
e7572274df doc: add a page about the test suite
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-05-06 12:40:12 +10:00
Peter Hutterer
fe4e707561 doc: expand scrolling documentation
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-04-28 10:47:01 +10:00
Peter Hutterer
0515a670af evdev: add support for LIBINPUT_MODEL_* udev tags
Some devices need specific configuration or different defaults.
Push that into udev rules and a hwdb file, that's where detection is the
easiest. The LIBINPUT_MODEL_ prefix is used to determine some type of device
model. Note that this property is a private API and subject to change at
any time without notice.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Tested-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-04-24 08:38:58 +10:00
Hans de Goede
5c671e0375 evdev: Add support for POINTINGSTICK_CONST_ACCEL udev property
There is quite a wide spread in the delta events generated by trackpoints,
some generate deltas of 1-2 under normal use, while others generate deltas
from 1-20.

It is desirable to normalize trackpoint deltas just like we are normalizing
mouse deltas to 1000 dpi, so as to give different model laptops aprox.
the same trackpoint cursor speed ootb.

Recent versions of udev + hwdb set a POINTINGSTICK_CONST_ACCEL udev property
which can be used to adjust trackpoints which are too slow / too fast
ootb, this commit implements support for that property.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-04-22 09:35:28 +02:00
Peter Hutterer
7016a960b8 doc: add a note that sometimes there's more than one ID_INPUT_* set
Just setting one of them on a device doesn't guarantee that libinput takes
that as device type.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-04-22 08:17:36 +10:00
Peter Hutterer
abdca33387 touchpad: introduce MULTITAP for multi-tap-and-drag
Once we have a doubletap, enter a loop in the state machine where we can tap
multiple times and either get a multi-click or a multi-click drag-and-drop.

The sequence down/up down/up down/up produces a triple-click. The sequence
down/up down/up down/up down produces a triple-click with a button down for
dragging. Yes, that glorious octuple-tap-and-drag, it is now possible. World
domination has been achieved, thank you for playing.

We don't know when we finish tapping now, so add a timeout to send the last
click event once the finger has been released for the last time. This
guarantees that the timestamp of the last button down is later than the
last release. This avoids the bug fixed in synaptics commit
xf86-input-synaptics-1.8.0-21-g37d34f0 (some application don't handle
doubletap correctly without the timestamps).

This works for double-tap immediately, for multi-tap we need to remember the
timestamp of the first press event and use it for the release event so that
there's a forced gap between the release and the second press.

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

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-04-17 12:59:22 +10:00
Peter Hutterer
75f15917a3 evdev: add support for middle button emulation
This is just the required framework, it's not hooked up to anything just yet.
Hooking it up comes as separate commit to better detail why/when a device
supports emulation.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-04-17 12:50:03 +10:00
Peter Hutterer
39f1125347 touchpad: don't allow taps in the top half of the palm exclusion zone.
Touches in the exclusion zone are ignored for palm detection and don't move
the cursor. Tapping however triggers before we know whether something is a
palm or not, so we get erroneous button clickst.

If a tap happens in the top half of the touchpad, within the palm exclusion
zones, ignore it for tap purposes. To avoid further complicating the state
machine simply pretend there was a movement > threshold on that finger. This
advances the tap state machine properly that no button events are sent for
this finger.

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

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-04-16 15:47:34 +10:00
Peter Hutterer
ee376b0b56 Revert "touchpad: parse the TOUCHPAD_RESOLUTION property"
This reverts commit 0e64837f30.

Rather than a customized touchpad property, let udev handle this and set the
absinfo struct during the normal setup procedures. No need for libinput to
have a custom workaround here.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-03-20 11:09:05 +10:00
Peter Hutterer
0e64837f30 touchpad: parse the TOUCHPAD_RESOLUTION property
Not all touchpad kernel drivers supply the x/y resolution. Let the udev hwdb
fix this up where possible and read the value from it.

This is intentionally only used on touchpads, touchscreen devices without
resolution should be considered buggy and fixed in the kernel.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2015-03-17 15:13:55 +10:00