Age | Commit message (Collapse) | Author |
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
(cherry picked from commit 8251d7a8ec00b4160b6601a6f2f4f0f5d461cbee)
|
|
Add a new EvdevCloseDevice() function to unify this.
We used to leak data
- PreInit allocates mtdev, but nothing except one error path released it.
- each DEVICE_ON re-allocates mtdev but it is never released
Reported-by: Zdenek Kabelac <zdenek.kabelac@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
(cherry picked from commit ac5173163d7d1e18d47630a397ece0f26b2568c8)
|
|
The axis label property array currently only has enough elements for the
non-multitouch axes. This change allocates enough space for all axes,
which prevents an array overrun write. This may manifest as stack
corruption on some platforms.
Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 4145fe1c087708bf5d6608e328342282ecb93ab0)
|
|
Protocol B devices report the number of touches by giving a maximum and
minimum slot value. The current code ignores the minimum value, which is
usually 0, and underreports the number of touches by 1.
Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 9ce068e760e1282183c7aa1b4cc6b0fcb6b494dd)
|
|
Some keyboards export scroll axes and any absolute axis possible in 11
dimensions. All these axes are mute, except possibly for the scroll wheels.
So if a device has a scroll axis, and we're configuring it as mouse, force
the x/y axes into existence. This stops the logspam complaining about not
enough axes on pointer movement after a xrandr change.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
(cherry picked from commit f28507e8ce2bd45b51c28f024baebd9711c28fc3)
|
|
REL_HWHEEL has a positive increment, not a negative one like REL_WHEEL.
X.Org Bug 46205 <http://bugs.freedesktop.org/show_bug.cgi?id=46205>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
(cherry picked from commit 99340147b9092a5aaec997eca407282a51e1f063)
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
5c5b2c8db851df7921cedd888222a6630a007fd8 added forced x/y axes if a device
has any axes of the same mode. This was too broad a brush, some devices have
a relative wheel but absolute x/y axes and would now get misdetected as
purely relative device.
Only force relative axes if a device no rel x/y _and_ no abs x/y.
Reproducible: virtual machine with QEMU USB Tablet will stop working
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
|
|
Evdev is a 100% stateful protocol. The following represents three
touches. Two touches begin and end at the same time at (500, 500) and
(1000, 1000). The third touch begins after the first two end, and is at
(500, 500).
ABS_MT_SLOT 0 /* Set touch slot */
ABS_MT_TRACKING_ID 0 /* New touch with ID 0 in slot 0 */
ABS_MT_POSITION_X 500 /* Initial X position */
ABS_MT_POSITION_Y 500 /* Initial Y position */
ABS_MT_SLOT 1 /* Set touch slot */
ABS_MT_TRACKING_ID 1 /* New touch with ID 1 in slot 1 */
ABS_MT_POSITION_X 1000 /* Initial X position */
ABS_MT_POSITION_Y 1000 /* Initial Y position */
SYNC /* End of frame */
ABS_MT_SLOT 0 /* Go back to slot 0 */
ABS_MT_TRACKING_ID -1 /* Touch in slot 0 ended */
ABS_MT_SLOT 1 /* Go to slot 1 */
ABS_MT_TRACKING_ID -1 /* Touch in slot 1 ended */
SYNC /* End of frame */
ABS_MT_SLOT 0 /* Go back to slot 0 */
ABS_MT_TRACKING_ID 2 /* New touch in slot 0 with ID 2 */
SYNC /* End of frame */
ABS_MT_TRACKING_ID -1 /* Touch in last slot (0) ended */
SYNC /* End of frame */
Note that touch 2 has the same X and Y position as touch 0. This is
implied because no new value was emitted for slot 0. In fact, Linux will
not emit an event in the same slot with the same event type and code
unless the value has changed. Thus, we can only assume that all the MT
valuators have the same values as they were when they were last sent for
the given slot.
This change adds an array of valuator mask to hold all the last valuator
values that came from evdev for each slot. When a new touch begins, all
the last values are copied into it.
This patch assumes initial axis values of 0 in each slot. Linux and
mtdev do not provide a facility to query the current values of axes in
each slot yet. This may cause spurious incorrect touch valuator values
at the beginning of an X session, but there's nothing we can do about it
right now.
Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
If a device has both relative and absolute axes, we'd initialise the
relative axes but label them with the absolute labels.
The current code is broken for mixed mode devices. Most of these devices
operate primarily in relative mode, but have some absolute axes available
for secondary functionality. For now, label the relative axes properly. We
can fix the absolute axes later.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
|
|
Too much in the server relies on x/y to exist and to be axes 0 and 1. So if
any relative axes exist, initialize REL_X/Y or ABS_X/Y as well.
For servers up to 1.11: a scrollwheel-only device now has relative axes
where it only had buttons before.
For servers 1.12 or later: the device now has x/y in addition to the scroll
axes.
X.Org Bug 44655 <http://bugs.freedesktop.org/show_bug.cgi?id=44655>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
|
|
addition of two missing define tests required when no multitouch related
symbols are available in user-space
Fixes X.Org Bug 44578 <https://bugs.freedesktop.org/show_bug.cgi?id=44578>
Signed-off-by: Pete Beardmore <pete.beardmore@msn.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
If we don't know the resolution, set it to 0. This is invalid, and tells
the X client that we don't know the resolution, rather than reporting an
incorrect value.
This value was originally from commit
6271494faa4c45f4fa10509f72e0515f2cef36c6, which is the initial commit
from Adam Jackson adding absolute axis support.
Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Added in 683a55e504f4fc2d1c847c54986439a0c61b2f20 due to a botched up
rebase -i. The contents of udev.c and EvdevIsVirtual are identical, there is
no need for an extra file for this one function.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
In 683a55e504f4fc2d1c847c54986439a0c61b2f20, a dependency on libudev was
added, but documented in configure.ac as a dependency on udev (which
also happens to ship a pkg-config file).
Signed-off-by: Cyril Brulebois <kibi@debian.org>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Found-by: Tinderbox
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
|
|
Signed-off-by: Cyril Brulebois <kibi@debian.org>
|
|
Remove the ABI check hack, just check for the server version directly now
that we have one that definitely has the multitouch APIs.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
If the XI2.2 headers are present but mtdev isn't, build without MULTITOUCH
defined.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
If we spot inputproto 2.1.99.3, we assume we have a capable X server. This
should really be a server version check, but the server version hasn't been
bumped yet.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Even if MT support isn't available, include it in the build. The checks in
the code check whether mt_mask is non-NULL but they would all need ifdef
escaping otherwise.
Leave the mtdev part inside the ifdef however, so that we don't need the
mtdev header if we don't build with multitouch.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
|
|
The kernel exports both ABS_X and ABS_MT_POSITION_X (and a couple others)
for a multi-touch capable device. For such devices, only count the axis once
since we submit ABS_MT_POSITION_X through ABS_X.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
The kernel exports a bunch of information as axis that shouldn't be an axis
and we don't treat it as axis in the server. Add this helper instead of
checking for the axis codes manually.
No function change.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Gone since inputproto 2.1.99.3
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
MT axes are the same as traditional axes, so one into the other so we get
x/y coordinates regardless wich axes it comes from.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
After we swap the axes, we only call valuator_mask_set for axes that are
not zero, so we need to unset the axes that became zero when swapped.
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
We were correctly swapping the valuator values, but we were not
calling valuator_mask_unset() when needed, so the cursor kept jumping
to the edges.
This patch does the swapping before the main "for", so we don't need to
store unswapped_{x,y} and unswapped_isset_{x,y} even when we don't need
to swap.
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Pointer events will be emulated by the server.
Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
No real effect on the code, but it helps to have that line in the log when
searching for driver issues.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
BUTTON_PRESS is much harder to confuse with a button number than a simple 1.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
ABS_MT_SLOT comes before any other events. The following order of events
is common for protocol B devices (and mtdev):
...
EV_SYN
ABS_MT_SLOT → posting here means we miss on the position information
ABS_MT_POSITION_X
ABS_MT_POSITION_Y
ABS_MT_SLOT
ABS_MT_POSITION_X
ABS_MT_POSITION_Y
EV_SYN
Store the stot state as SLOT_EMPTY after posting an event (i.e. EV_SYN and
ABS_MT_SLOT) and then don't post until the next slot/syn event.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Otherwise we segfault after the first SYN event
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Without this change, an MT touchpad in relative mode could end a touch
while not resetting the oldMask used to calculate relative values. This
fix allows a Magic Trackpad to behave as a relative mode device again.
Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
|
|
MTDev translates all multitouch devices to the slotted evdev protocol.
This provides a clean and uniform interface and reduces message handling
inside the input module and X.
Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
|
|
This multitouch addition only supports slotted MT evdev protocol
devices. Support must be enabled at configure time using
--enable-multitouch.
Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
Amendments: XI_TouchMotion -> XI_TouchUpdate, rename mtMask to mt_mask
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Use udev to check for the device's sysfs path, if it contains LNXSYSTM it's
a kernel-emulated device. This property can then be used to determine if
there are any real devices connected, allowing the desktop environment to
e.g. turn off the touchpad whenever there's a mouse attached.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Bad conflict resolution in xf86-input-evdev-2.6.0-30-g745fca0
Reported-by: Sebastian Glita <glseba@yahoo.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
Conflicts:
src/evdev.c
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|