| Commit message (Collapse) | Author | Age |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
FALSE == Success, so if we fail during EvdevOpenMTDev, the caller thinks
that everything worked fine, proceeds to set up the fd, etc.
This may later cause a crash, when a device comes back later as different
device and posts axis events where we didn't configure axes in the first
place.
Note: Unclear why there was no udev event received for the device being
removed and coming back as different device though.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
|
|
| |
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fixes regression introduced in 2f67509b53b27dd7f51ca2aadd19605aee613a61.
If evdev is used for touchpads, the abs axis movement is converted to a rel
movement. Without the two relative axes initialized, the events are
discarded.
Axes 0 and 1 are always x/y anyway unless specifically configured otherwise.
X.Org Bug 59784 <http://bugs.freedesktop.org/show_bug.cgi?id=59784>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|\ |
|
| |
| |
| |
| |
| |
| |
| | |
X.Org Bug 59340 <http://bugs.freedesktop.org/show_bug.cgi?id=59340>
Reported-by: Bastien Nocera <hadess@hadess.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
| |
| |
| |
| |
| |
| | |
No functional changes.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
| |
| |
| |
| |
| |
| | |
No functional changes.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
| |
| |
| |
| | |
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Special-case RHEL_WHEEL, RHEL_HWHEEL and REL_DIAL to add scroll valuators
for those axes in addition to the absolute axes.
X.Org Bug 54387 <http://bugs.freedesktop.org/show_bug.cgi?id=54387>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
| |
| |
| |
| |
| |
| |
| | |
This will enable a device to have relative scrolling axes in addition to
absolute axes (required by the QEMU tablet).
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
| |
| |
| |
| | |
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|/
|
|
|
|
| |
Makes it easier to initialise everything to the right values.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We expect at least BTN_TOUCH for anything with MT axes, but devices that
don't have that need a button class regardless. Some gamepads define
MT axes but no buttons, causing a bug in the server when they post a
TouchBegin.
[ 97436.293] (EE) BUG: triggered 'if (!b || !v)'
[ 97436.293] (EE) BUG: exevents.c:929 in UpdateDeviceState()
So, ignore it, if it is a joystick (e. g. if it have BTN_JOYSTICK defined).
Otherwise, fake a button.
This patch basically merges two patches written by Peter Hutterer
<peter.hutterer@who-t.net>.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
|
|
|
|
|
|
|
|
|
|
| |
This isn't actually needed at all.
xf86nameCompare() will skip over underscores and is case-independent. So
xf86SetStrOption("foo_bar") will return an Option "FooBar" and vice versa.
The server won't return a zero-length string either, it'll return
NULL and spit a warning to the log.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
|
|
|
|
| |
No need to store this in the evdev struct.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
|
|
|
|
|
|
| |
If stat fails while checking if the device is virtual, just say "no, it's
not virtual" and continue. If the device really went away, it'll be removed
through other means.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
|
|
|
|
|
| |
update evdev according to latest changes in input.h
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
|
|
|
|
|
|
| |
Messages logged during the signal handler should use LogMessageVerbSigSafe
as of ABI 18.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
|
|
|
|
|
|
|
|
|
| |
Regression introduced in 8af0e6f1ebaf327f735bca507134b34bb24b26c6.
s is now initialized to NULL, so we never entered the loop.
X.Org Bug 53168 <http://bugs.freedesktop.org/show_bug.cgi?id=53168>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fixes /usr/bin/Xorg: symbol lookup error:
/usr/lib64/xorg/modules/input/evdev_drv.so: undefined symbol: udev_new
This doesn't appear in the default configuration as Xorg links against
libudev and the symbol is defined when evdev is loaded. It can be reproduced
with a HAL-enabled server.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is signal handler code and we cannot clean up properly while in the
signal handler. So reduce the code to removing the signal handler and let
the device be cleaned up later.
If hotplugging is on, the server will remove it when the config backend says
so and if it is off, the server will remove it on shutdown.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
mtdev uses a chunk of memory per device (~41kB), mainly for for its
internal event buffers. The average box these days can easily have 10
devices, but only few of those are multitouch. So check if we have
ABS_MT_POSITION axes and only create an mtdev instance if we do.
If a device has multitouch axes but not x/y, we will ignore events from this
device now.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
==16557== 388,240 (3,520 direct, 384,720 indirect) bytes in 10 blocks are definitely lost in loss record 1,669 of 1,671
==16557== at 0x4A06F18: calloc (vg_replace_malloc.c:566)
==16557== by 0xC3EAD4D: mtdev_new (core.c:345)
==16557== by 0xC3EAE6B: mtdev_new_open (core.c:383)
==16557== by 0xC1E0452: EvdevOpenDevice (evdev.c:2365)
==16557== by 0xC1E068C: EvdevPreInit (evdev.c:2431)
==16557== by 0x4B8304: xf86NewInputDevice (xf86Xinput.c:846)
==16557== by 0x4B8857: NewInputDeviceRequest (xf86Xinput.c:989)
==16557== by 0x4CCB4C: device_added (udev.c:211)
==16557== by 0x4CCFA6: config_udev_init (udev.c:342)
==16557== by 0x4CBE81: config_init (config.c:48)
==16557== by 0x4A8A9A: InitInput (xf86Init.c:918)
==16557== by 0x4921EE: main (main.c:258)
After PreInit, the fd and mtdev pointer are still valid. We check for the
fd, but unconditionally allocated another mtdev struct for each device.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
|
|
|
|
|
|
| |
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
|
|
|
|
| |
Just to unclutter the code
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
|
|
|
|
|
| |
We need this for mixed axis devices. No functional changes.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
|
|
|
|
|
|
|
|
| |
Removes a warning, and with the input ABI 18 this is forced to const in the
server.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
|
|
|
|
|
|
|
| |
No need to alloc mtdev if we then find out the fd is a duplicate one anyway.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
|
|
|
|
|
| |
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
| |
Fixes:
evdev.c: In function 'EvdevInitButtonMapping':
evdev.c:1659:25: warning: initialization discards 'const' qualifier from
pointer target type [enabled by default]
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
|
|
|
|
|
| |
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
| |
Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
| |
Found-by: Tinderbox
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
|
|
|
|
|
|
|
| |
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 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>
|
|\ |
|