1. 20 May, 2014 1 commit
  2. 30 Apr, 2014 2 commits
  3. 09 Apr, 2014 3 commits
  4. 11 Mar, 2014 5 commits
  5. 26 Feb, 2014 2 commits
    • Hans de Goede's avatar
      Wait for *new* coordinates on a clickpad click before reporting the click · bbe4c56c
      Hans de Goede authored
      
      
      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: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
      bbe4c56c
    • Hans de Goede's avatar
      On button down update cumulative to current x and y, instead of previous · 743c45b9
      Hans de Goede authored
      
      
      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: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
      743c45b9
  6. 23 Feb, 2014 1 commit
  7. 03 Dec, 2013 1 commit
  8. 14 Oct, 2013 1 commit
    • Peter Hutterer's avatar
      Switch to libevdev for the eventcomm backend · 41840a65
      Peter Hutterer authored
      
      
      This has a potential bug that would need to be fixed in mtdev first:
      if we get a SYN_DROPPED and we miss out on events, the current code emulates a
      normal EV_SYN, feeds that to mtdev and hopes that that fills the mtdev output
      queue.
      
      If mtdev doesn't generate events on that EV_SYN, we're stuck in limbo and may
      get weird results. The loop will continue and sync the device, but there's the
      off chance we get odd events.
      Signed-off-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
      41840a65
  9. 25 Mar, 2013 1 commit
  10. 02 Jan, 2013 1 commit
  11. 09 Aug, 2012 1 commit
  12. 22 Jun, 2012 2 commits
  13. 12 Jun, 2012 1 commit
  14. 04 Jun, 2012 1 commit
  15. 31 May, 2012 1 commit
  16. 15 May, 2012 2 commits
  17. 10 May, 2012 1 commit
  18. 09 May, 2012 3 commits
  19. 02 May, 2012 1 commit
  20. 26 Apr, 2012 2 commits
  21. 13 Apr, 2012 1 commit
    • Chase Douglas's avatar
      Use maximum number of touches reported by evdev · 38b93b71
      Chase Douglas authored
      This resolves a regression from da461b91
      
      
      where three touch tap and click actions on certain devices no longer
      work.
      
      Some devices report a higher touch count than the number of touches they
      can provide data for. For example, many Synaptics touchpads can report
      up to five touches, but only provide data for two of them. We need to be
      able to report the correct number of touches for these devices when
      there are three touches. Using the maximum of the reported touch count
      and the number of touches provided ensures the count is accurate for all
      device types.
      Signed-off-by: default avatarChase Douglas <chase.douglas@canonical.com>
      Signed-off-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
      38b93b71
  22. 10 Apr, 2012 1 commit
  23. 26 Mar, 2012 1 commit
  24. 25 Mar, 2012 1 commit
  25. 22 Mar, 2012 1 commit
  26. 13 Mar, 2012 2 commits
    • Chase Douglas's avatar
      Calculate touch data for semi-mt devices, but don't send touch events · f1985220
      Chase Douglas authored
      
      
      Previously, all touch data from semi-mt devices was ignored because the
      X server doesn't support them. However, the touch data must be used for
      proper clickpad handling.
      
      Instead of ignoring semi-mt device touch events, mark the device as
      being semi-mt and allow initialization of the touch state. The touches
      will then be used in calculating the cumulative_d{x,y} values that are
      needed for clickpad support.
      
      When handling the touch data for X event processing, simply skip over
      reporting the touches.
      Signed-off-by: default avatarChase Douglas <chase.douglas@canonical.com>
      Reviewed-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
      f1985220
    • Chase Douglas's avatar
      Add cumulative_d{x,y} to SynapticsHwState · 500243ac
      Chase Douglas authored
      
      
      These values will be used for clickpad press and drag with two fingers.
      
      While the clickpad button is not pressed, cumulative_d{x,y} will match x
      and y values. Once the clickpad button is pressed, cumulative_d{x,y}
      will be updated with the relative motion of each active touch on the
      touchpad. This allows for dragging with one finger while another finger
      stays stationary holding the clickpad button down.
      
      This is an easier and less latent approach than trying to guess which
      touch was the "dragging" touch.
      
      [fixed build error for mt off]
      Signed-off-by: default avatarChase Douglas <chase.douglas@canonical.com>
      Reviewed-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
      500243ac