summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2015-10-29synaptics 1.8.3xf86-input-synaptics-1.8.3synaptics-1.8-branchPeter Hutterer1-1/+1
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-10-28Use cumulative relative touch movements while scrollingGabriele Mazzotta2-6/+10
Signed-off-by: Gabriele Mazzotta <gabriele.mzt@gmail.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> (cherry picked from commit ec0901e5f81d9cad6cc8bbdcb5ea075009c13de5)
2015-03-27synaptics 1.8.2xf86-input-synaptics-1.8.2Peter Hutterer1-1/+1
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-03-27eventcomm: ignore fake and broken MT devicesPeter Hutterer1-0/+9
An MT device without X/Y is not a touchpad. And neither are fake MT devices. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com> (cherry picked from commit fc9f490a2c87e6f87b0f483cd6bf5f526dddbb8d)
2015-03-27eventcomm: prevent possibly division by zeroPeter Hutterer1-0/+10
This came up as a kernel bug, but it's valid to create uinput devices with a min == max range for x/y. Technically valid, but effectively useless, so catch it, complain and hobble on along. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com> (cherry picked from commit 30866b97be6939b895327b930154ef758eed7ff8)
2015-03-27Add a delay between the second button down-up event of double tapsGabriele Mazzotta3-109/+90
Some applications ignore the second tap of double taps because of the lack of a delay between the button down and button up events. Prevent this by replacing the transition from TS_2B to TS_START with a transition from TS_2B to TS_SINGLETAP that emits only a button down event. The button up event will be emitted when transitioning from TS_SINGLETAP to TS_START. In addition, decrease the default value of MaxDoubleTapTime from 180 ms to 100 ms in order to make double taps faster. Signed-off-by: Gabriele Mazzotta <gabriele.mzt@gmail.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> (cherry picked from commit 37d34f0356cc556dd8a49ec5d1ed64d49417a9b2)
2015-03-27Update machine state diagramGabriele Mazzotta1-149/+216
The diagram didn't entirely reflect the current state of the code. Signed-off-by: Gabriele Mazzotta <gabriele.mzt@gmail.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> (cherry picked from commit a357647d3fb918b94efbda98138fb0240a949ef2)
2014-09-18synaptics 1.8.1xf86-input-synaptics-1.8.1Peter Hutterer1-1/+1
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-09-17Prohibit negative or zero x/y resolutionsPeter Hutterer1-0/+10
Default resolution is 1, don't allow setting 0 to avoid divisions by 0 or just general weirdness. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> (cherry picked from commit 049611bd7f04e285909c55807478306cce83385f)
2014-09-17When resetting, reset the open slots to -1Peter Hutterer1-1/+7
open_slots holds the slot index, resetting it to 0 is a bad idea. And make sure that we do reset after DEVICE_INIT. We already do so on DEVICE_CLOSE, but after the first DEVICE_ON the data could still be random. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Keith Packard <keithp@keithp.com> (cherry picked from commit afbbcfa10eb3a2295823720907f35bb59972dd82)
2014-09-17eventcomm: add missing axis labels to avoid array overrunPeter Hutterer1-2/+11
And warn when we run out of labels. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Keith Packard <keithp@keithp.com> (cherry picked from commit d239f831f17ccf5468f5dc6b2f199a9c1f6e35af)
2014-09-17eventcomm: ensure we're on the same clock as the serverPeter Hutterer1-2/+11
Default on evdev devices is CLOCK_REALTIME. If that clock falls behind the server's CLOCK_MONOTONIC, motion after a clickpad click may be delayed by the difference in the clocks. In detail: When the timer func is triggered, GetTimeInMillis() which is CLOCK_MONOTONIC, is stored as hwState->millis. The eventcomm backend uses struct input_event time (CLOCK_REALTIME). When we read events from the device, if the evdev time is less than the server time, the fix for (#48777) sets the current event time to hwState->millis. Until the evdev time overtakes that stored time, all events have the hwState->millis time. If during that time a clickpad triggers a physical click, clickpad_click_millis is set to hwState->millis + the ignore-motion timeout. Thus, all motion is ignored until the event time overtakes that stored time. The whole issue is further enhanced by us unconditionally setting the timer func if we get any events, which is a separate issue anyway. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com> (cherry picked from commit 90d19302306f49722e210227b2fb5161e6f51880)
2014-09-17Include xorg-server.h to fix build errors on newest glibcPeter Hutterer3-0/+6
In file included from /usr/include/string.h:634:0, from /usr/include/xorg/os.h:53, from /usr/include/xorg/misc.h:115, from /usr/include/xorg/xf86str.h:37, from /usr/include/xorg/xf86Xinput.h:54, from synproto.h:36, from synproto.c:24: /usr/include/xorg/os.h:579:1: error: expected identifier or '(' before '__extension__' strndup(const char *str, size_t n); See http://lists.freedesktop.org/archives/xorg-devel/2014-July/043070.html Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> (cherry picked from commit 96e60a4ea242d2decf109835981ae186cc36f642)
2014-09-17Prevent two-finger taps from being ignoredGabriele Mazzotta1-2/+3
When two fingers are used, the coordinates of only one of them is taken into account. This can lead to sudden variations of the absolute coordinates when two-fingers taps are performed if the finger considered changes. Take into account coordinates variations to prevent unwanted taps only if the number of fingers doesn't change. Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> (cherry picked from commit 7d0ff39519e4d3760722b914883bee276035061c)
2014-09-17conf: increase top software button area to 15%Peter Hutterer1-1/+1
We had reports that the top software button area is hard to hit for those using the trackpoint and clicking the buttons with their thumb. Analysis of event recordings (3 different people) for left, right and middle clicks shows that there is a significant amount of events up to about 10mm (with outliers up to 12mm) from the top of the touchpad. That maps to 15%. Interestingly, the middle button does not seem to need this, presumably the haptic feedback of the little dots sticking out from the surface make hitting the button easier. Its size is increased to 15% anyway, for simplicity and because a sample set of 3 is too small to be definitive about this. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com> (cherry picked from commit 730101223432f60397c61f74a5e6789b3ee34ecd)
2014-05-13synaptics 1.8.0xf86-input-synaptics-1.8.0Peter Hutterer1-1/+1
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-30conf: drop the PNPID matching from the fdi filePeter Hutterer1-9/+1
Rely on INPUT_PROP_TOP_BUTTONPAD and default button areas as well. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-30synaptics 1.7.99.2xf86-input-synaptics-1.7.99.2Peter Hutterer1-1/+1
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-30Fix product ID cutoff for MODEL_APPLETOUCH/MODEL_UNIBODY_MACBOOKClinton Sprain1-1/+3
Some Macbooks are being tagged as MODEL_UNIBODY_MACBOOKs when they should not be. This causes the default sensitivity to be very low for them, making the touchpad almost unusable. This change puts those devices into the correct bucket again. Signed-off-by: Clinton Sprain <clintonsprain@gmail.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-30Add support for INPUT_PROP_TOPBUTTONPADHans de Goede6-28/+45
Add a HasSecondaryButtons boolean config option which defaults to true for devices with the INPUT_PROP_TOPBUTTONPAD and false for all other devices. Only parse the SecondarySoftButtonAreas when this option is true, effectively disabling the top buttons when it is false. Likewise, only initialize the SecondarySoftButtonAreas property if we enable support for it. This means that it is now safe to always set a SecondarySoftButtonAreas default in 50-synaptics.conf, and that he section which was intended for use with future pnp-id matching can be dropped, as that is now all handled in the kernel. While at also remove the comment about disabling the bottom edge area, as that is now done automatically. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-04-29man: add some missing quotesPeter Hutterer1-1/+1
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-04-23Always count tripletap + click as 3 fingerclick on pads with < 3 touchesHans de Goede1-20/+5
When trying to do a 3 fingerclick on a touchpad which only tracks 2 touches, this may register as a 3 or 2 fingerclick depending on the order in which the touchpad detects the fingers. If the 2 outer fingers of the 3 get seen first, then the 2 touches will be too far apart for the heuristic to see them as being close together, and the click gets counted as a 2 finger click. A user will likely never do a 2 finger click with a 3th finger resting somewhere else on the pad, where-as the above misdetection of the clicks is a real issue, so simply always count a click with trippletap set as a 3 finger click on pads which track less then 3 touches. https://bugzilla.redhat.com/show_bug.cgi?id=1086218 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-04-22conf: add more PnPIDs and DMI matches for LenovosPeter Hutterer2-3/+5
And expand DMI strings to more precise matches Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-04-09Comment the touch statesPeter Hutterer1-5/+5
Everytime I look at this I get confused about OPEN_EMPTY vs EMPTY. Let's fix that. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-04-09eventcomm: Hook up the libevdev log handlerPeter Hutterer1-0/+40
This is a bit problematic: libevdev only has one global log handler. So if we have another driver use libevdev, we'll either overwrite that handler or get overwritten, whichever comes first. So we need to re-set the handler every time we get an event to make sure we log through our handler. Likewise, if we ever drop the device, we need to unset the log handler back to NULL because we may unload the module and our handler may disappear. Use the lowest logging priority, let the server filter based on the verbosity level instead. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-04-09eventcomm: read one more event after finishing a syncPeter Hutterer1-1/+3
Once the sync finishes, we get -EAGAIN. This only indicates the sync is done, but some events may still be waiting in the pipe for us to read. We must read those now, otherwise select may not trigger on further data. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-04-09eventcomm: drop superflous helper functionPeter Hutterer1-11/+1
last_mt_vals_slot is only used in one location and there we can just use cur_slot Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-03-24Disable GrabEventDevice by defaultPeter Hutterer1-1/+12
This was required when we started supporting hotplugging to avoid duplicate events. These days the drawback of not being able to record events in the case of a bug is significant. Check the configuration source on init. If the device was hotplugged through a a server config backend, disable the grab. If the device was statically configured through an xorg.conf then leave the default grab enabled to avoid a duplicate device. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-03-18synaptics 1.7.99.1xf86-input-synaptics-1.7.99.1Peter Hutterer1-1/+1
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-03-18If the touchpad is in TOUCHPAD_OFF mode, allow physical clicksPeter Hutterer2-11/+13
Enabling clicks in off mode also allows for the new Lenovo *40 series to use the top software buttons while the touchpad is disabled. This benefits those that usually disable touchpads altogether but still need the buttons for the trackstick. This changes existing behaviour, but TouchpadOff was always intended to stop erroneous events while typing. Physical button presses are hard to trigger accidentally. On the touchpads that TouchpadOff concept was originally designed for the buttons are nowhere near the keyboard and are physically separated from the touchpad anyway. On Clickpads, triggering a physical click requires more force than accidentally touching the surface. https://bugs.freedesktop.org/show_bug.cgi?id=76156 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-03-14conf: automatically enable the top softbutton area for the new LenovosPeter Hutterer2-0/+23
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-03-13conf: apply ClickPad softbuttons option through fdi file too (fixed version)Peter Hutterer1-0/+4
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-03-13Revert "conf: apply ClickPad softbuttons option through fdi file too"Peter Hutterer1-4/+0
Bad fdi file, type="string" is missing and it wouldn't merge properly. This reverts commit a35b2d629d85d7a8c82621a5098a17e5ffb341dc.
2014-03-13conf: apply ClickPad softbuttons option through fdi file tooPeter Hutterer1-0/+4
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-03-12Revert "Add another third state to TouchpadOff for disabling all but button ↵Peter Hutterer7-46/+15
clicks" This third state is not needed, the behaviour of the touchpad driver is now good enough to not need an external syndaemon instance to toggle this third state. This reverts commit eea73358760c7ff9c9dac061f265753637c6f25c. Conflicts: man/synaptics.man src/synaptics.c Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-03-12Don't allow any type of movement starting in the top softbutton areaStephen Chandler Paul1-1/+2
Clicking in the top soft button area causes the trackpad to begin registering motion, even if the finger never leaves the top soft button area. We don't want this kind of behavior for the top soft button area, since it makes clicking and dragging items much more difficult when using a pointing stick. Signed-off-by: Stephen Chandler Paul <thatslyude@gmail.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-03-12Replace is_inside_anybutton_area with current_button_areaStephen Chandler Paul2-12/+18
Signed-off-by: Stephen Chandler Paul <thatslyude@gmail.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-03-12eventcomm: drop mtdevPeter Hutterer3-79/+37
All kernel touchpad devices now support slots, there isn't really a need to support protocol A devices in synaptics. If such devices exist, we just treat them as non-multitouch devices. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-03-12eventcomm: drop some use of mtdevPeter Hutterer1-51/+51
When checking the device don't open a new mtdev instance, use the existing libevdev struct. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-03-11eventcomm: drop calculation of slot offsetPeter Hutterer1-1/+1
The kernel guarantees slots start at 0 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-03-11eventcomm: fix wrong event code for SYN_REPORTPeter Hutterer1-1/+1
This was supposed to emulate a SYN_REPORT event so that the upper layers process what's in the queue. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2014-03-11Add property support for secondary (top) software buttonsPeter Hutterer5-27/+59
This was originally intended as a fixed xorg.conf option only (and still largely is seen as such). Secondary software button are required only on a specific series of touchpads and should be pre-configured by the system and/or the distribution. As such, the property will not be initialized if it is not set in the xorg.conf and will thus not respond to runtime changes. Exposing the property in this way gives clients a chance of detecting if a top software button area is present and thus adjust their behaviour accordingly. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
2014-03-11synaptics: Add support for server managed fdsHans de Goede3-31/+45
Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-02-26man: fix documentation about the new touchpad statePeter Hutterer1-1/+1
leftover from an earlier revision Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-02-26Wait for *new* coordinates on a clickpad click before reporting the clickHans de Goede2-2/+10
It is possible for a click to get reported before any related touch events get reported, here is the relevant part of an evemu-record session on a T440s: E: 3.985585 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- E: 3.997419 0003 0039 -001 # EV_ABS / ABS_MT_TRACKING_ID -1 E: 3.997419 0001 014a 0000 # EV_KEY / BTN_TOUCH 0 E: 3.997419 0003 0018 0000 # EV_ABS / ABS_PRESSURE 0 E: 3.997419 0001 0145 0000 # EV_KEY / BTN_TOOL_FINGER 0 E: 3.997419 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- E: 5.117881 0001 0110 0001 # EV_KEY / BTN_LEFT 1 E: 5.117881 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- E: 5.133422 0003 0039 0187 # EV_ABS / ABS_MT_TRACKING_ID 187 E: 5.133422 0003 0035 3098 # EV_ABS / ABS_MT_POSITION_X 3098 E: 5.133422 0003 0036 3282 # EV_ABS / ABS_MT_POSITION_Y 3282 E: 5.133422 0003 003a 0046 # EV_ABS / ABS_MT_PRESSURE 46 E: 5.133422 0001 014a 0001 # EV_KEY / BTN_TOUCH 1 E: 5.133422 0003 0000 3102 # EV_ABS / ABS_X 3102 E: 5.133422 0003 0001 3282 # EV_ABS / ABS_Y 3282 E: 5.133422 0003 0018 0046 # EV_ABS / ABS_PRESSURE 46 E: 5.133422 0001 0145 0001 # EV_KEY / BTN_TOOL_FINGER 1 E: 5.133422 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- Notice the BTN_LEFT event all by itself! If this happens, it may lead to the following problem scenario: -touch the touchpad in its right click area -let go of the touchpad -rapidly click in the middle area, so that BTN_LEFT gets reported before the new coordinates (such as seen in the trace above, this may require some practicing with evemu-record to reproduce) -the driver registers the click as a right click because it uses the old coordinates from the cumulative coordinates to determine the click location This commit fixes this by: 1) Resetting the cumulative coordinates not only when no button is pressed, but also when there is no finger touching the touchpad, so that when we do get a touch the cumulative coordinates start at the right place 2) Delaying processing the BTN_LEFT down transition if there is no finger touching the touchpad This approach has one downside, if we wrongly identify a touchpad as a clickpad, then the left button won't work unless the user touches the touchpad while clicking the left button. If we want we can fix this by doing something like this: 1) Making update_hw_button_state return a delay; and 2) Tracking that we've delayed BTN_LEFT down transition processing; and 3) When we've delayed BTN_LEFT down transition return a small delay value; and 4) If when we're called again we still don't have a finger down, just treat the click as a BTN_LEFT But this is not worth the trouble IMHO, the proper thing to do in this scenario is to fix the mis-identification of the touchpad as a clickpad. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-02-26On button down update cumulative to current x and y, instead of previousHans de Goede1-0/+6
When a button click and new coordinates get reported in one go we sync the cumulative coordinates to the old x and y, rather then the newly reported ones. This keeping of the old coordinates causes the following issue: -touch the touchpad in its right click area -let go of the touchpad -rapidly click in the left click area (or middle area), so that the new location and the click get reported in one syn (may require some practicing with evemu-record to reproduce) -the driver registers the click as a right click because it uses the old coordinates from the cumulative coordinates to determine the click location Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-02-26Ignore motion the first X ms after a clickpad clickHans de Goede2-0/+14
This fixes my #1 anoyance with clickpads, where 2 out of 3 clicks turn into a click + drag unless I hold my finger really really still. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Replaced property with a hardcoded 100ms. This is not something that we should expose as property, we should find a delay that works best and live with it. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-02-26Don't report motion inside soft-button areasHans de Goede2-2/+67
Unless the motion has started outside the soft-button area. Note that we must start reporting motions regardless of whether we think we're in the button area or not as soon as we've switched to using cumulative coordinates, since then the coordinates are no longer absolute. This fixes the reporting of unintended motion just before a click in a soft button area which sometimes causes mis-clicks. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-02-26Get rid of old_hw_stateHans de Goede2-36/+23
We only use it to store button state which we already have in priv->lastButtons. While at it also properly indent the code block checking the various soft button areas. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2014-02-26Add an enum for the different soft_button_areasHans de Goede1-13/+22
While at it also move the enum for the soft button edges out of is_inside_button_area() so that it can be used elsewhere too. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>