summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2012-08-07Don't delete the device on ENODEVPeter Hutterer
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>
2012-07-27Only use mtdev for multitouch devicesPeter Hutterer
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>
2012-07-25Don't re-open mtdev after PreInitPeter Hutterer
==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>
2012-07-13Fix compilation warnings for non-multitouch buildsDaniel Stone
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>
2012-06-15Move axis labels into a separate header filePeter Hutterer
Just to unclutter the code Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2012-06-15Split initializing one axis label out into a helper functionPeter Hutterer
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>
2012-06-08Constify InputDriverRec->default_optionsPeter Hutterer
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>
2012-06-08Move duplicate check up before mtdev allocationPeter Hutterer
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>
2012-06-08Close the fd when mtdev open failsPeter Hutterer
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
2012-06-08Release mtdev data whenever we close the fdPeter Hutterer
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>
2012-06-08strtol doesn't need a empty string, NULL is good enough.Peter Hutterer
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>
2012-06-08Use xf86IDrvMsg in emuMB.c instead of ErrorFPeter Hutterer
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
2012-06-07Fix buffer overrun when populating axis label property arrayChase Douglas
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>
2012-05-25Report the correct number of touches for MT protocol B devicesChase Douglas
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>
2012-05-21Fix some obvious constness-related compile warnings.Marcin Slusarz
Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2012-05-01Devices configured as mice need REL_X/YPeter Hutterer
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>
2012-03-16Fix inverted horizontal scroll (#46205)Peter Hutterer
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>
2012-03-07evdev 2.7.0xf86-input-evdev-2.7.0Peter Hutterer
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2012-01-26Only force REL_X/Y if no ABS_X/Y existsPeter Hutterer
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>
2012-01-24Copy last valuator values into new touch valuator masksChase Douglas
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>
2012-01-18Prefere relative axis labelling over absolute axis labellingPeter Hutterer
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>
2012-01-17Force x/y axes to exist on devices with any other axes (#44655)Peter Hutterer
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>
2012-01-10missing multitouch related define testsPete Beardmore
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>
2012-01-06Set the default resolution to 0Chase Douglas
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>
2012-01-03Remove unused udev.cPeter Hutterer
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>
2012-01-03configure.ac: Fix udev/libudev dependency.Cyril Brulebois
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>
2011-12-31Remove redundant redeclaration of Evdev3BEmuPreInitJeremy Huddleston
Found-by: Tinderbox Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
2011-12-31evdev 2.6.99.901xf86-input-evdev-2.6.99.901Cyril Brulebois
Signed-off-by: Cyril Brulebois <kibi@debian.org>
2011-12-29Require xserver 1.12 RC1Peter Hutterer
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>
2011-12-29Test for mtdev before assuming multitouchPeter Hutterer
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>
2011-12-24Remove need for --enable-multitouchPeter Hutterer
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>
2011-12-24Include config.h from evdev.hPeter Hutterer
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-12-24Always include mt_mask in the evdev structPeter Hutterer
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>
2011-12-23Merge branch 'multitouch'Peter Hutterer
2011-12-20Don't count legacy and MT axes twicePeter Hutterer
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>
2011-12-20Add is_blacklisted_axis() helperPeter Hutterer
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>
2011-12-20Drop now-unnecessary XI 2.1 and XI 2.2 error suppression definesPeter Hutterer
Gone since inputproto 2.1.99.3 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-12-20Map ABS_MT_POSITION_X/Y into ABS_X/YPeter Hutterer
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>
2011-12-16Fix relative events with swapped axesPaulo Zanoni
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>
2011-12-15Fix absolute events with swapped axesPaulo Zanoni
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>
2011-12-15Use xf86InitValuatorAxisStruct, the touch-specific version was droppedPeter Hutterer
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-29Don't send pointer events for multitouch touchscreen devicesChase Douglas
Pointer events will be emulated by the server. Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
2011-11-11Add the required defines to compile against the inputprotoPeter Hutterer
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11Print to the log if we find multitouch axes.Peter Hutterer
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>
2011-11-11Replace 0/1 button values with enumsPeter Hutterer
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>
2011-11-11Skip event posting for empty slots.Peter Hutterer
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>
2011-11-11Replace open_slot/close_slot with a SlotState enumPeter Hutterer
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11Simplify a condition, only the event type differs herePeter Hutterer
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11When resetting the queue, don't reset the touchMaskPeter Hutterer
Otherwise we segfault after the first SYN event Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2011-11-11MT axes are counted separately, make sure they're initialized too.Peter Hutterer
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>