Commit graph

4255 commits

Author SHA1 Message Date
Peter Hutterer
86d3628d55 tools: fix touch/abs event coordinate transformation in event-gui
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-07-03 09:59:22 +10:00
Peter Hutterer
3758f38bfd tools: draw the circle for abs events in the right position
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-07-03 09:54:29 +10:00
Peter Hutterer
fccbe88f05 touchpad: log the sysname of the device that looks like a bad clickpad
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-07-03 09:53:59 +10:00
Hans de Goede
bb3edf4c94 touchpad: Switch to smooth simple acceleration code from filter.c
The old touchpad accel code was clamping touchpad acceleration between
0.2 and 0.4, and on the test devices I have the constant_factor ended up
such that in practice the accel was almost always 0.2, so rather than having
a velocity based acceleration curve, in essence it was just always using an
acceleration of 0.2 .

This commit introduces actual velocity based acceleration based on the
recently added smooth simple acceleration code from filter.c .

Before feeding motion events to filter.c, they first get adjusted for touchpad
resolution. For touchpads where the driver does not provide resolution info,
scale based on the diagonal-size in units instead.

While at it rename tp_init_accel's dispatch parameter from touchpad to tp
to be consistent with all other functions.

Since the acceleration is also used for scrolling also adjust the scroll
start threshold for these changes.

Note that switching to the smooth simple accel code, as an added bonus gives
the tp code an accel profile with a threshold and a speed parameter, which
is exactly what is needed for the upcoming configuration interface support.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-07-02 14:20:26 +10:00
Peter Hutterer
6b6f24ee1c Add functions to get the device name, PID and VID
Those three are the ones that matter for logging or device identification in
callers, so let's provide them.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2014-07-02 08:52:33 +10:00
Peter Hutterer
8fa5d0bf51 touchpad: disable tapping for fingers exceeding the timeout/motion threshold
The current code triggers multi-finger tapping even if the finger released was
previously held on the touchpad for a while. For an event sequence of:
1. first finger down
2. first finger move past threshold/wait past timeout
3. second finger down
4. first finger up

The second finger initiates the two-finger tap state, but the button event is
sent when the first finger releases - despite that finger not meeting the
usual tap constraints. This sequence can happen whenever a user swaps fingers.

Add the finger state to the actual touchpoints and update them whenever the
constrains are broken. Then, discard button events if the respective touch
did not meet the conditions.

http://bugs.freedesktop.org/76760

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-07-02 08:12:37 +10:00
Hans de Goede
14ad471ff5 touchpad: Simplify tp_hysteresis
Once we get beyond the:

	if (abs(diff) <= margin)
		return center;

test, then diff is either > margin or < -margin, otherwise the test would
have triggered.

So the "return center + diff;" at the end will never be reached, and the
"else if (diff < -margin)" can be turned into a simple "else".

This commit does not just simplify tp_hysteresis, but (arguably more
important) also makes it clearer to the reader what it does.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-07-01 10:54:18 +10:00
Jonas Ådahl
053c16c5a3 Fix coding style
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2014-06-28 22:41:29 +02:00
Jonas Ådahl
c4de28fce3 test/Makefile.am: Also add LIBUDEV_CFLAGS to AM_CPPFLAGS
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2014-06-28 22:40:54 +02:00
Stephen Chandler Paul
521bd2f112 tablet: Include axes with all events
Signed-off-by: Stephen Chandler Paul <thatslyude@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-27 12:08:39 +10:00
Peter Hutterer
7fbb08e0ca tablet: copy the axis state into the tablet event
The tablet state updates with each event during libinput_dispatch(), but the
state in the event must reflect the state at the time of the event.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Stephen Chandler Paul <thatslyude@gmail.com>
2014-06-27 12:08:37 +10:00
Stephen Chandler Paul
bcbf9f95fd tablet: Include tool with all events
Signed-off-by: Stephen Chandler Paul <thatslyude@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-27 12:08:33 +10:00
Stephen Chandler Paul
8b1b988fd8 tablet: Replace tool-update with proximity-in
A proximity-in event is something we want, especially since the current drafted
wayland spec has a proximity-in event. Adding this also makes our events more
consistent. And since we can just report the current tool in use with
proximity-in events, we can get rid of the tool-update event.

Signed-off-by: Stephen Chandler Paul <thatslyude@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-27 12:08:31 +10:00
Stephen Chandler Paul
e18f713289 tablet: Remove tablet_notify_tool() and add tablet_get_tool()
Signed-off-by: Stephen Chandler Paul <thatslyude@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-27 12:07:48 +10:00
Stephen Chandler Paul
62a0995d19 tablet: Stop redundant proximity-out events from being reported
Because bad distance events still trigger calls to tablet_flush(),
tablet_flush() will see that the tablet is out of proximity and assume it's an
appropriate time to send a proximity-out event, even when we've already sent
one. This results in multiple proximity-out events being sent in a row instead
of just one.
In addition, the bad distance events test has been modified to pick up on this.
We shouldn't be receiving /any/ events when we get false distance events from
evdev anyway.

Signed-off-by: Stephen Chandler Paul <thatslyude@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-27 11:57:40 +10:00
Peter Hutterer
9a2f2ab46b Update libinput_tool_ref/unref() to return the tool object
For consistency with the other ref/unref funtions, see
13e9a1d744

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-27 11:57:40 +10:00
Peter Hutterer
cf5ba7056f Fix address for memcpy()
If we ever change to a dynamic array, this would've been buggy.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-27 11:57:40 +10:00
Stephen Chandler Paul
50b47aa8f9 tablet: Fix warnings in test/tablet.c
Signed-off-by: Stephen Chandler Paul <thatslyude@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-26 13:37:46 +10:00
Peter Hutterer
b1869eae76 tablet: always return 0 for axis values on non-axis events
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 15:02:03 +10:00
Peter Hutterer
1219b399de Add a couple missing @ref tags
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 15:02:03 +10:00
Peter Hutterer
152d60d7c3 evdev: fix a broken log message for per-context logging
Somehow escaped the fixes in 8302b0b7e3

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 15:02:03 +10:00
Peter Hutterer
ef34fee2a3 tools: explicitly ignore tablet event codes in the event-gui
For now anyway, silences the compiler warnings.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 14:45:08 +10:00
Peter Hutterer
8302b0b7e3 Merge branch 'master' into tablet-support
Conflicts:
	src/libinput-util.h
	test/misc.c
2014-06-25 14:43:45 +10:00
Peter Hutterer
d1f8a545e7 configure.ac: libinput 0.4
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 13:37:59 +10:00
Peter Hutterer
6d033dfa14 Merge branch 'master' of git+ssh://git.freedesktop.org/git/wayland/libinput 2014-06-25 13:37:02 +10:00
Stephen Chandler Paul
72f5758f2a touchpad: Fix typo in documentation
"a a left and…"->"a left and…"

Signed-off-by: Stephen Chandler Paul <thatslyude@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 12:53:38 +10:00
Peter Hutterer
186f618814 Drop the deprecated libinput_udev_create_for_seat()
We have enough API breakage in this release that it's not worth keeping
this around. Every caller must be fixed for all the other stuff anyway,
so drop this too.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 11:44:20 +10:00
Peter Hutterer
dd9cd664bc Fix a few comments referring to udev_create_for_seat()
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 11:43:32 +10:00
Peter Hutterer
ac5fc23e49 Drop the deprecated LIBINPUT_POINTER_*_SCROLL enums
We have enough API breakage in this release that it's not worth keeping
these around. Every caller must be fixed for all the other stuff anyway,
so drop this too.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 11:41:16 +10:00
Hans de Goede
568004d483 timer: Complain if a timer is set more than 5 seconds from now
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 11:13:39 +10:00
Hans de Goede
6c4778f891 test: Prefix litest created device names with litest
And add an example xorg.conf.d .conf file for ignoring these devices under
xorg.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 11:11:45 +10:00
Hans de Goede
8d6356e668 tp_post_twofinger_scroll: Move setting of t->is_pointer = false up a bit
There is no need to loop over the touch points twice.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 11:11:42 +10:00
Hans de Goede
c0af1b57d4 touchpad: Avoid spurious motion event for scroll movement below threshold
If the user puts down to fingers to scroll, then changes his mind and
lifts them, without having them moved past the initial scroll threshold in
either direction, then any movement which he has done will cause a spurious
scroll event when the second finger down is lifted first.

The problem is that t->is_pointer was not being set to false in this case,
since that is done in tp_post_twofinger_scroll after checking scroll.state
which never gets set in this scenario.

Instead of changing the order, simply completely remove scroll.state completely
it is a boolean, and everywhere we check for it we also check for the axis bits
in state.direction, so it is not necessary.

Also add a check to ensure there are no spurious motion events.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 11:11:39 +10:00
Hans de Goede
c9a01969d8 test: Add touchpad 2 finger scroll test
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 11:11:32 +10:00
Peter Hutterer
cc3ede9d56 test: add one more test for two-finger tapping
Inverted order of release from the other test

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-06-25 11:11:28 +10:00
Peter Hutterer
4441c9debe Add msleep() helper function
For those whose eyes struggle to focus on 5 zeros in a row, or those just sick
of forgetting one zero and wondering why things don't work.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-06-25 11:04:14 +10:00
Peter Hutterer
bad56cac5b Merge branch 'ref-counting-context'
Conflicts:
	src/udev-seat.c
	test/log.c
2014-06-25 10:32:42 +10:00
Jonas Ådahl
89aa3ca176 test: Add context reference counting test
This test relies on valgrind detecting the leak and use-after-free.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 10:27:03 +10:00
Jonas Ådahl
faab25c25c Make context reference counted
Instead of only allowing one owner keeping a libinput context alive,
make context reference counted, replacing libinput_destroy() with
libinput_unref() while adding another function libinput_ref().

Even though there might not be any current use cases, it doesn't mean we
should hard code this usage model in the API. The old behaviour can be
emulated by never calling libinput_ref() while replacing
libinput_destroy() with libinput_unref().

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 10:27:03 +10:00
Jonas Ådahl
13e9a1d744 Make ref count unref/ref() functions return resulting object pointer
In order to know if an unref() destroyed an object and to allow more
convenient use of ref(), make both functions return a pointer to the
object it was passed, or NULL if that object was destroyed.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-25 10:26:59 +10:00
Peter Hutterer
52cc0ef25a tablet: ignore pad buttons
We've got big plans for handling pad buttons, and the interface will likely
be different for those. Meanwhile, discard any pad button events so no-one can
get too used to them.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-06-24 10:47:04 +10:00
Peter Hutterer
6fd00f74d4 tablet: normalize the distance to 0..1
The actual data provided by current tablets is not anywhere close to accurate.
While it'd be nice to have this in mm, this is unlikely to happen anytime
soon. Use the same 0..1 normalized range as pressure has.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-06-24 10:47:04 +10:00
Jonas Ådahl
86c5fba0d2 event-gui: Don't drop fraction of pointer motion events
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2014-06-23 23:36:48 +02:00
Peter Hutterer
97a6bf10f9 Change the logging system to be per-context
Rather than a single global logging function, make the logging dependent on
the individual context. This way we won't stomp on each other's feet in the
(admittedly unusual) case of having multiple libinput contexts.

The userdata argument to the log handler was dropped. The caller has a ref to
the libinput context now, any userdata can be attached to that context
instead.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-06-23 15:39:08 +10:00
Peter Hutterer
6250397ac8 udev: split libinput_udev context init into two functions
This is preparation work for context-specific log handlers.

Callers are now encouraged to first initialize the context with
libinput_udev_create_context() and then set the seat for this context with
libinput_udev_assign_seat().

In the upcoming patch to support context-specific log handlers this enables a
caller to set the log handler for a context before any devices are
initialized. Otherwise, a log message generated by a new device may pass a
libinput context that the caller is not yet aware of.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-06-23 15:39:08 +10:00
Peter Hutterer
3f500b657f test: move the interface declaration up
No functional changes, just some prep work.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-23 15:23:35 +10:00
Peter Hutterer
967911791f Rename KEYBOARD_KEY_STATE to KEY_STATE
e912d620d0 changed from POINTER_BUTTON_STATE to
simply BUTTON_STATE, replicate that for key events too.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-23 15:23:35 +10:00
Peter Hutterer
82e81e8790 tools: add a tool for GUI-based debugging
Looking at debugging output is nice but not useful when testing for the feel
of a device. Add a tool that presents a canvas and draws the various events
onto it.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-06-23 14:53:27 +10:00
Peter Hutterer
55bf505807 Name-space the scroll event types
To provide a generic naming system of type_direction. That will become more
important once we add new axes as part of the ongoing work to support graphics
tablets.

[edit: and switch to the new defines]

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-06-23 14:31:56 +10:00
Peter Hutterer
797b4b4e5a tablet: provide x/y by default in mm off the top/left corner
Given that tablets may not have the same x/y resolution, raw or normalized
values are mostly meaningless and likely to be handled the wrong way.
Providing x/y in mm is the only constant, meaningful value.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-06-23 14:12:24 +10:00