- 14 Aug, 2016 1 commit
-
-
Peter Hutterer authored
Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 04 Aug, 2016 1 commit
-
-
Peter Hutterer authored
Inspired by the syndaemon -K switch and Anton Lindqvist's patch. https://patchwork.freedesktop.org/patch/102417/ We already ignored modifiers for dwt. Now we also ignore modifier + key combinations, i.e. hitting Ctrl+s to save does not trigger dwt, the touchpad remains immediately usable. However, if dwt is already active and a modifier combination is pressed, dwt remains active, i.e. while typing, a shift + key does not disable dwt. Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 20 Jul, 2016 2 commits
-
-
Peter Hutterer authored
All these effectively returned bools anyway, switch the signature over to be less ambiguous. Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Yong Bakos <ybakos@humanoriented.com> Reviewed-by:
Eric Engestrom <eric.engestrom@imgtec.com>
-
Peter Hutterer authored
These are internal functions, if we need them to return an error code we can change that at any time. Meanwhile, if we only ever return 0 anyway we might as well just make them voids to save on error paths. Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Yong Bakos <ybakos@humanoriented.com> Reviewed-by:
Eric Engestrom <eric.engestrom@imgtec.com>
-
- 03 Jul, 2016 1 commit
-
-
Peter Hutterer authored
Expose the middle button emulation on software buttons as proper config option. When enabled, remove the middle button software button area. https://bugs.freedesktop.org/show_bug.cgi?id=96663Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 19 Jun, 2016 1 commit
-
-
Peter Hutterer authored
We will reinstate the hysteresis for all devices making the negative pressure check unncessary. This reverts commit ef48c07a. Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 09 Jun, 2016 1 commit
-
-
Peter Hutterer authored
And change the various callers, especially those where we only had the separate struct for indentation purposes. Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net>
-
- 01 Jun, 2016 1 commit
-
-
Peter Hutterer authored
Quite a few bugs are caused by touchpad ranges being out of whack. If we get input events significantly outside the expected range (5% width/height as error margin) print a warning to the log. And add a new doc page to explain what is happening and how to fix it. Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 05 Apr, 2016 1 commit
-
-
Peter Hutterer authored
Middle button interaction is most commonly to paste and it is a single-event interaction (button press). We provided middle button in software button mode by emulating it with a two-finger press with L+R down at the same time. This is also what many touchpads are spectacularly bad at, it is very common to detect the physical button down event before the second finger registers, resulting in left or right clicks where a middle button should be triggered. Unless the fingers are resting on the touchpad for at least one scanout, the success rate for middle button emulation is only at 70% or so. This patch adds a 25%-width middle button area between the left and the right software button, everything else stays the same. To avoid immediate breakage, the middle button emulation remains but may be removed in the future. The doc is updated to only refer to the middle button area now. https://bugs.freedesktop.org/show_bug.cgi?id=94755Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 04 Apr, 2016 1 commit
-
-
Peter Hutterer authored
Resetting the motion history has the side-effect of swallowing movements, we don't calculate deltas until we have 4 motion events. During a finger release, we're likely to get a large pressure change between two events, resetting the motion history prevents the cursor from jumping on release. The value of 7 found by trial-and-error, tested on the T440 and T450 hardware. The absolute value is highly variable but recordings show that the pressure changes only by 1 or 2 units during normal interaction. Higher pressure changes are during finger position changes but since those should not cause a jump anyway, we tend to win there too. Currently only enabled for negative pressure changes, let's see how we go with that. This is enabled for all touchpads now, but the value may need device-specific thresholds in the future. https://bugs.freedesktop.org/show_bug.cgi?id=94379Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 30 Mar, 2016 1 commit
-
-
Peter Hutterer authored
Resetting the motion history has the side-effect of swallowing movements, we don't calculate deltas until we have 4 motion events. During a finger release, we're likely to get a large pressure change between two events, resetting the motion history prevents the cursor from jumping on release. The value of 7 found by trial-and-error, tested on the T440 and T450 hardware. The absolute value is highly variable but recordings show that the pressure changes only by 1 or 2 units during normal interaction. Higher pressure changes are during finger position changes but since those should not cause a jump anyway, we tend to win there too. Currently only enabled for negative pressure changes, let's see how we go with that. https://bugs.freedesktop.org/show_bug.cgi?id=94379Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 11 Mar, 2016 1 commit
-
-
Peter Hutterer authored
The touchpad's sensors are too far apart (or the firmware interferes), causing in a jerky movement visible especially on slow motion. We get a bunch of normal motion events, then only ABS_MT_PRESSURE updates without x/y updates. After about one mm of movement x/y updates resume, with the first event covering the distance between the last motion event. That event is usually accelerated and thus causes a large jump. Subsequent events are sufficiently fine-grained again. This patch counts the number of non-motion events. Once we hit 10 in a row, we mark the first motion update as non-dirty, effectively discarding the motion and thus stopping the pointer jumps. https://bugs.freedesktop.org/show_bug.cgi?id=94379Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Tested-by:
Benjamin Tissoires <benjamin.tissoires@gmail.com>
-
- 18 Feb, 2016 1 commit
-
-
Peter Hutterer authored
We previously used the half-way mark of the touchpad's y axis to decide where to ignore tapping. Move this down to the top edge of the software buttons instead. Users may tap with a finger in the software button areas, on the rest of the touchpad it's unlikely that they tap within 5% of the edge. On touchpads with physical buttons or if clickfinger is enabled, the no-tapping zone extends to the bottom of the touchpad. This required splitting the tests into clickfinger, softbuttons and hardbuttons. https://bugs.freedesktop.org/show_bug.cgi?id=93947Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 04 Feb, 2016 1 commit
-
-
Peter Hutterer authored
If a key enables dwt and is held down when the timeout expires, re-issue the timeout. There is a corner case where dwt may not work as expected: 1. key down and held down 2. dwt timer expires, dwt is re-issued 3. touch starts 4. key is released 5. dwt timer expires 6. touch now starts moving the pointer This is an effect of the smart touch detection. A touch starting after the last key press is released for pointer motion once dwt turns off again. This is what happens in the above case, the dwt timer expiring is the last virtual key press. This is a corner case and likely hard to trigger by a real user. https://bugs.freedesktop.org/show_bug.cgi?id=93984Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 27 Jan, 2016 1 commit
-
-
Peter Hutterer authored
There are a number of use-cases where tapping may be desirable, but tap-and-drag is not, e.g. where tapping is used to select multiple items in a list. Having tap-and-drag on hinders this, and the nature of the interaction means it cannot be detected based on timeouts, movement thresholds, etc. Provide an option instead to turn tap-an-drag off. Tap-and-drag remains enabled by default (though tapping is disabled by default). For the touchpad tap state diagram, the new option disables the transition from state TOUCH to state TAPPED and releases the button immediately instead. This means that multitap-and-drag is disabled too since we now just loop around in the single-tap state for multitap. It also makes tapping more responsive - we don't have to wait for the timeout before we know whether it's a tap event. The first touch time is noted, we now send the button press with the time of the first touch and the release with the time of the release. This ensures a realistic time diff between the two events. https://bugs.freedesktop.org/show_bug.cgi?id=93502Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.netto> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 24 Jan, 2016 1 commit
-
-
Peter Hutterer authored
Unused since d92ae62dSigned-off-by:
Peter Hutterer <peter.hutterer@who-t.net>
-
- 20 Jan, 2016 3 commits
-
-
Peter Hutterer authored
https://bugs.freedesktop.org/show_bug.cgi?id=92834Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net>
-
Peter Hutterer authored
Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net>
-
Peter Hutterer authored
When adding 3+ finger gestures, there isn't much specific state left that's 2-finger only. Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net>
-
- 18 Jan, 2016 1 commit
-
-
Peter Hutterer authored
Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net>
-
- 13 Jan, 2016 1 commit
-
-
Peter Hutterer authored
Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net>
-
- 06 Sep, 2015 1 commit
-
-
Peter Hutterer authored
The following sequence currently generates a right-button event: finger 1 down finger 2 down finger 1 up finger 2 held down This is easily triggered with short scroll events. There are two issues here: first is that the tapping code elsewhere treats any tap with a second finger down as a left-button tap, not a right button one. So if anything, we should generate a left button click here, not a right button click. Arguably, generating a button click here is wrong though, it's not a very well defined sequence and relatively difficult to trigger intentionally. So the best solution here is to simply ignore the release event and move straight back to state HOLD - unless the second finger is released within the timeout. If the finger is set down again during the timeout, we move straight to TOUCH_2_HOLD - this could eventually be interpreted as a tap, but not for now. Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 19 Aug, 2015 1 commit
-
-
Peter Hutterer authored
For short and quick scroll gestures, those that should only trigger a few lines of scroll the pointer acceleration is wildly unpredictable. Since we average the motion of both fingers it's hard enough to intuitively predict what the motion will be like. On top of that is the small threshold before we start scrolling, so some of the initial motion gets swallowed before we accelerate, making the next motion even more unpredictable. The end result is that multiple seemingly identical finger motions cause wildly different scroll motion. Drop pointer acceleration for two-finger and edge scrolling. This makes short scroll motions much more predictable and doesn't seem to have much effect on long scroll motions. Plus, in natural scroll mode it really feels like the content is stuck to your fingers now. Go wash your hands. https://bugzilla.redhat.com/show_bug.cgi?id=1249365Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 03 Aug, 2015 1 commit
-
-
Peter Hutterer authored
Not all multi-finger touchpads are able to reliably produce gestures, so make it optional. This patch just adds a boolean (currently always true) that gets set on touchpad init time, i.e. it is not run-time configurable. Three and four-finger gestures are filtered out in gesture_notify(), if the cap isn't set the event is discarded. For two-finger gestures we prevent a transition to PINCH, so we don't inadvertently detect a pinch gesture and then not send events. This way, a 2fg gesture is always scroll. Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 28 Jul, 2015 1 commit
-
-
Jonas Ådahl authored
In most places we use 64 bit unsigned integers; lets be consistent and use it everywhere. Signed-off-by:
Jonas Ådahl <jadahl@gmail.com> Reviewed-by:
Peter Hutterer <peter.hutterer@who-t.net>
-
- 23 Jul, 2015 3 commits
-
-
Peter Hutterer authored
If a thumb moves around, it's not resting and we should consider it a normal touch. Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
Peter Hutterer authored
That's the most likely area it will be resting in, if it's sitting anywhere above that it's likely part of an interaction. A thumb in the lowest 15mm needs to trigger the pressure threshold before it's labelled a thumb. A thumb in the lowest 8mm is considered a thumb if it remains there for 300ms. Regardless of the pressure, since we can't reliably get pressure here. If a thumb moves out of the area, or starts outside of that area it is never a thumb. If edge scrolling is enabled, the 8mm threshold is ineffective since we'll have normal interaction in that zone for horizontal scrolling. The thumb tests now require all touchpads to be switched to clickfinger, if we test for thumb detection on the bottom of the pad we won't get expected motion events due to the software button area. Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
Peter Hutterer authored
This is not a frequent toggle, so we don't need to jump through too many hoops here. We simply enable/disable on command and once any current timeouts have expired the new setting takes effect. Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 22 Jul, 2015 1 commit
-
-
Peter Hutterer authored
Whenever we cross from N slots to at least one fake finger, reset the motion history and skip the next event too. Especially on serial Synaptics touchpads, the first touch update after a two-slot → TRIPLETAP is garbage, as is the one from TRIPLETAP → two slots. Example sequence reproduce on a T440s: E: 4.488757 0003 003a 0084 # EV_ABS / ABS_MT_PRESSURE 84 E: 4.488757 0003 002f 0001 # EV_ABS / ABS_MT_SLOT 1 E: 4.488757 0003 0039 0433 # EV_ABS / ABS_MT_TRACKING_ID 433 E: 4.488757 0003 0035 2500 # EV_ABS / ABS_MT_POSITION_X 2500 E: 4.488757 0003 0036 3064 # EV_ABS / ABS_MT_POSITION_Y 3064 E: 4.488757 0003 003a 0060 # EV_ABS / ABS_MT_PRESSURE 60 E: 4.488757 0003 0018 0084 # EV_ABS / ABS_PRESSURE 84 E: 4.488757 0001 0145 0000 # EV_KEY / BTN_TOOL_FINGER 0 E: 4.488757 0001 014e 0001 # EV_KEY / BTN_TOOL_TRIPLETAP 1 E: 4.488757 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- E: 4.508506 0003 002f 0000 # EV_ABS / ABS_MT_SLOT 0 E: 4.508506 0003 0036 2982 # EV_ABS / ABS_MT_POSITION_Y 2982 E: 4.508506 0003 003a 0086 # EV_ABS / ABS_MT_PRESSURE 86 E: 4.508506 0003 002f 0001 # EV_ABS / ABS_MT_SLOT 1 E: 4.508506 0003 0035 3464 # EV_ABS / ABS_MT_POSITION_X 3464 E: 4.508506 0003 0036 2716 # EV_ABS / ABS_MT_POSITION_Y 2716 E: 4.508506 0003 0001 2982 # EV_ABS / ABS_Y 2982 E: 4.508506 0003 0018 0086 # EV_ABS / ABS_PRESSURE 86 E: 4.508506 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- subsequent events then hover around the 3464 mark, but that initial jump is enough to cause a massive cursor jump. https://bugs.freedesktop.org/show_bug.cgi?id=91352Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Hallelujah-expressed-by:
Benjamin Tissoires <benjamin.tissoires@redhat.com> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 15 Jul, 2015 1 commit
-
-
Peter Hutterer authored
Thumb detection interfered with gestures a fair bit but it shouldn't. A pinch gesture with a thumb is a fairly natural move so we shouldn't cancel that. A swipe gesture with a thumb on the touchpad - well, don't do that. No need for code here. Reported-by:
Carlos Garnacho <carlosg@gnome.org> Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Carlos Garnacho <carlosg@gnome.org>
-
- 09 Jul, 2015 1 commit
-
-
Peter Hutterer authored
All touchpad recordings seen so far show that a value above 100 is definitely a thumb or a palm. Values below are harder to discern, and the same isn't true for touchpads supporting ABS_PRESSURE instead of ABS_MT_PRESSURE. The handling of a touch is as outlined in tp_thumb_detect: * thumbs are ignored for pointer motion * thumbs cancel gestures * thumbs are ignored for clickfinger count * edge scrolling doesn't care either way * software buttons don't care either way * tap: only if thumb on begin The handling of thumbs while tapping is the simplest approach only, more to come in follow-up patches. Note that "thumb" is the synonym for "this touch is too big to be a fingertip". Which means that a light thumb touch will still be counted as a finger. The side-effect here is that thumbs resting a the bottom edge of the touchpad will almost certainly not trigger the pressure threshold because most of the thumb is off the touchpad. Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 06 Jul, 2015 3 commits
-
-
Peter Hutterer authored
No functional changes Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net>
-
Hans de Goede authored
Signed-off-by:
Hans de Goede <hdegoede@redhat.com>
-
Hans de Goede authored
Implement touchpad pinch (and rotate) gesture support. Note that two two-finger scrolling tests are slightly tweaked to assure that there is enough touch movement to allow the scroll-or-pinch detect code to do its work. Signed-off-by:
Hans de Goede <hdegoede@redhat.com> Acked-by:
Jason Gerecke <jason.gerecke@wacom.com>
-
- 02 Jul, 2015 1 commit
-
-
Peter Hutterer authored
This simply doesn't work for low-dpi mice. Normalizing a 400dpi mouse to a 1000dpi mouse forces a minimum movement of 2.5 units and the resulting pixel jumps. It is impossible for the caller to detect whether the jump was caused by a single motion or multiple motion events. This is technically an API break, but not really. The accelerated data was already relatively meaningless, even if normalized as the data did not correspond predictably to any input motion (unless you know the implementation acceleration function in the caller). So we can drop the mention from there without expecting any ill effects in the caller. The unaccelerated data was useless for low-dpi mice and could only be used to measure the physical distance of the mouse movement - something not used in any caller we're aware of (if needed, we can add that functionality as a separate call). Dropping motion normalization for unaccelerated deltas also restores true dpi capabilities to users of that API, mostly games that want to make use of high-dpi mice. This is a simplified patch, the normalization is still in place for most of libinput, it merely carries the original coordinates in the event itself. In the case of touchpads, the coordinates are unnormalized into the x-axis coordinate space as per the documentation. Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 30 Jun, 2015 3 commits
-
-
Peter Hutterer authored
Tested on three laptops here, Lenovo T61, X220 and an HP EliteBook (?), all with small touchpads. It's hard to have a hand position where the palm touches the touchpad while using the trackpoint. So we might as well save us the effort of monitoring events and enabling/disabling it on demand. As a side-effect this fixes 1233844, but that's more a coincidence. https://bugzilla.redhat.com/show_bug.cgi?id=1233844Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
Peter Hutterer authored
The touchpad is disabled for 500ms after a trackpoint event to avoid erroneous palm touches. This is currently refreshed on every trackpoint event and thus forces a delay of 500ms when switching between the two. Instead, reduce the timeout to 300ms but ignore any touches started while the trackpoint was active (i.e. before the last trackpoint event). A touch started after the last event is released once the timeout expires. This is the same logic used for disable-while-typing. https://bugzilla.redhat.com/show_bug.cgi?id=1233844Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
Peter Hutterer authored
No functional changes, just rearranging where it fits better. Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 23 Jun, 2015 1 commit
-
-
Peter Hutterer authored
Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-
- 21 Jun, 2015 1 commit
-
-
Peter Hutterer authored
Most scroll motions would be labelled a palm. https://bugs.freedesktop.org/show_bug.cgi?id=90980Signed-off-by:
Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by:
Hans de Goede <hdegoede@redhat.com>
-