aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAge
* Return BadValue if EvdevOpenMTDev failsPeter Hutterer2013-02-12
| | | | | | | | | | | | | | 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>
* Make errors on EVIOCGBIT more obviousPeter Hutterer2013-02-12
| | | | Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
* Always init axis mapping for the first two rel axes (#59784)Peter Hutterer2013-01-25
| | | | | | | | | | | | | | 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>
* Merge branch 'touch-axis-swap'Peter Hutterer2013-01-25
|\
| * Handle axis swap, calibration, and inversion for touch events (#59340)Peter Hutterer2013-01-14
| | | | | | | | | | | | | | 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>
| * Move calibration adjustments to helper functionPeter Hutterer2013-01-14
| | | | | | | | | | | | No functional changes. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
| * Move valuator swapping into a helper functionPeter Hutterer2013-01-14
| | | | | | | | | | | | No functional changes. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
| * Localise tmp variablePeter Hutterer2013-01-14
| | | | | | | | Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
* | Allow relative scroll valuators on absolute devices (#54387)Peter Hutterer2013-01-23
| | | | | | | | | | | | | | | | | | 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>
* | Split rel and abs axis mapping into two separate arraysPeter Hutterer2013-01-23
| | | | | | | | | | | | | | 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>
* | Move some stuff into the new alloc functionPeter Hutterer2013-01-23
| | | | | | | | Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
* | Move allocation of EvdevRec into a helper functionPeter Hutterer2013-01-23
|/ | | | | | Makes it easier to initialise everything to the right values. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
* Force a button if MT axes are present and it is not a gamepadMauro Carvalho Chehab2013-01-08
| | | | | | | | | | | | | | | | | | | 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>
* Drop special XKB option handlingPeter Hutterer2013-01-08
| | | | | | | | | | | | 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>
* Localise XKB initializationPeter Hutterer2013-01-08
| | | | | | No need to store this in the evdev struct. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
* If stat fails, pretend it's not a virtual devicePeter Hutterer2012-12-05
| | | | | | | | 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>
* Add missing mt axis labelsBenjamin Tissoires2012-11-30
| | | | | | | 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>
* Use LogMessageVerbSigSafe if availablePeter Hutterer2012-08-10
| | | | | | | | 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>
* Fix broken ButtonMapping option (#53168)Peter Hutterer2012-08-08
| | | | | | | | | 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>
* Link against libudevPeter Hutterer2012-08-07
| | | | | | | | | | | | 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>
* Don't delete the device on ENODEVPeter Hutterer2012-08-07
| | | | | | | | | | | | 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>
* Only use mtdev for multitouch devicesPeter Hutterer2012-07-27
| | | | | | | | | | | | | 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>
* Don't re-open mtdev after PreInitPeter Hutterer2012-07-25
| | | | | | | | | | | | | | | | | | | | | | ==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>
* Fix compilation warnings for non-multitouch buildsDaniel Stone2012-07-13
| | | | | | 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>
* Move axis labels into a separate header filePeter Hutterer2012-06-15
| | | | | | Just to unclutter the code Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
* Split initializing one axis label out into a helper functionPeter Hutterer2012-06-15
| | | | | | | 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>
* Constify InputDriverRec->default_optionsPeter Hutterer2012-06-08
| | | | | | | | 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>
* Move duplicate check up before mtdev allocationPeter Hutterer2012-06-08
| | | | | | | 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>
* Close the fd when mtdev open failsPeter Hutterer2012-06-08
| | | | | Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
* Release mtdev data whenever we close the fdPeter Hutterer2012-06-08
| | | | | | | | | | | 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>
* strtol doesn't need a empty string, NULL is good enough.Peter Hutterer2012-06-08
| | | | | | | | | | 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>
* Use xf86IDrvMsg in emuMB.c instead of ErrorFPeter Hutterer2012-06-08
| | | | | Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
* Fix buffer overrun when populating axis label property arrayChase Douglas2012-06-07
| | | | | | | | | | 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>
* Report the correct number of touches for MT protocol B devicesChase Douglas2012-05-25
| | | | | | | | | 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>
* Fix some obvious constness-related compile warnings.Marcin Slusarz2012-05-21
| | | | | Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
* Devices configured as mice need REL_X/YPeter Hutterer2012-05-01
| | | | | | | | | | | | 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>
* Fix inverted horizontal scroll (#46205)Peter Hutterer2012-03-16
| | | | | | | | | 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>
* Only force REL_X/Y if no ABS_X/Y existsPeter Hutterer2012-01-26
| | | | | | | | | | | | | | 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>
* Copy last valuator values into new touch valuator masksChase Douglas2012-01-24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* Prefere relative axis labelling over absolute axis labellingPeter Hutterer2012-01-18
| | | | | | | | | | | | | 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>
* Force x/y axes to exist on devices with any other axes (#44655)Peter Hutterer2012-01-17
| | | | | | | | | | | | | | | | | 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>
* missing multitouch related define testsPete Beardmore2012-01-10
| | | | | | | | | | 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>
* Set the default resolution to 0Chase Douglas2012-01-06
| | | | | | | | | | | | | 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>
* Remove unused udev.cPeter Hutterer2012-01-03
| | | | | | | | 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>
* Remove redundant redeclaration of Evdev3BEmuPreInitJeremy Huddleston2011-12-31
| | | | | Found-by: Tinderbox Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
* Require xserver 1.12 RC1Peter Hutterer2011-12-29
| | | | | | | 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>
* Remove need for --enable-multitouchPeter Hutterer2011-12-24
| | | | | | | | 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>
* Include config.h from evdev.hPeter Hutterer2011-12-24
| | | | Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
* Always include mt_mask in the evdev structPeter Hutterer2011-12-24
| | | | | | | | | | | 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>
* Merge branch 'multitouch'Peter Hutterer2011-12-23
|\