summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandr Shadchin <shadchin@cvs.openbsd.org>2014-05-17 17:18:22 +0000
committerAlexandr Shadchin <shadchin@cvs.openbsd.org>2014-05-17 17:18:22 +0000
commitf01b5ab213da65b173cfbb4aaeea900d8e5be747 (patch)
treebb3b5478ec4eca15456e79981164865517702c4a
parentde69cb40f7dfe1d719afe1249d522ae7cd2450df (diff)
Update to xf86-input-synaptics 1.8.0.
ok matthieu@, tested claudio@
-rw-r--r--driver/xf86-input-synaptics/ChangeLog715
-rw-r--r--driver/xf86-input-synaptics/Makefile.am2
-rw-r--r--driver/xf86-input-synaptics/Makefile.in15
-rw-r--r--driver/xf86-input-synaptics/aclocal.m438
-rw-r--r--driver/xf86-input-synaptics/conf/11-x11-synaptics.fdi5
-rw-r--r--driver/xf86-input-synaptics/conf/50-synaptics.conf9
-rw-r--r--driver/xf86-input-synaptics/conf/Makefile.in11
-rwxr-xr-xdriver/xf86-input-synaptics/configure120
-rw-r--r--driver/xf86-input-synaptics/configure.ac8
-rw-r--r--driver/xf86-input-synaptics/include/Makefile.in11
-rw-r--r--driver/xf86-input-synaptics/include/synaptics-properties.h3
-rw-r--r--driver/xf86-input-synaptics/man/Makefile.in11
-rw-r--r--driver/xf86-input-synaptics/man/synaptics.man60
-rw-r--r--driver/xf86-input-synaptics/src/Makefile.am3
-rw-r--r--driver/xf86-input-synaptics/src/Makefile.in22
-rw-r--r--driver/xf86-input-synaptics/src/eventcomm.c487
-rw-r--r--driver/xf86-input-synaptics/src/eventcomm.h2
-rw-r--r--driver/xf86-input-synaptics/src/properties.c51
-rw-r--r--driver/xf86-input-synaptics/src/synaptics.c311
-rw-r--r--driver/xf86-input-synaptics/src/synapticsstr.h24
-rw-r--r--driver/xf86-input-synaptics/src/synproto.h14
-rwxr-xr-xdriver/xf86-input-synaptics/test-driver127
-rw-r--r--driver/xf86-input-synaptics/test/Makefile.am18
-rw-r--r--driver/xf86-input-synaptics/test/Makefile.in715
-rw-r--r--driver/xf86-input-synaptics/test/eventcomm-test.c326
-rw-r--r--driver/xf86-input-synaptics/test/fake-symbols.c452
-rw-r--r--driver/xf86-input-synaptics/test/fake-symbols.h156
-rw-r--r--driver/xf86-input-synaptics/tools/Makefile.in11
28 files changed, 1354 insertions, 2373 deletions
diff --git a/driver/xf86-input-synaptics/ChangeLog b/driver/xf86-input-synaptics/ChangeLog
index d46eddfb2..b412d646b 100644
--- a/driver/xf86-input-synaptics/ChangeLog
+++ b/driver/xf86-input-synaptics/ChangeLog
@@ -1,53 +1,320 @@
-commit baca0fde5958d9dc17a9b13372cc8819170e2f74
+commit 3a4cc96590ca0e0ff526a5e5406f29a402bddd1a
Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date: Tue Apr 29 14:27:30 2014 +1000
+Date: Tue May 13 11:20:25 2014 +1000
- synaptics 1.7.5
+ synaptics 1.8.0
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-commit bbaf4d646ebf4393a1ee0eb9bcc569054ed878f9
+commit d4d7229c41a20cf6757882a24f45e28d936a27c5
Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date: Thu Mar 20 11:51:17 2014 +1000
+Date: Wed Apr 30 13:08:53 2014 +1000
- Avoid erroneously handling two touchpoints in the same slot
+ conf: drop the PNPID matching from the fdi file
- If a slot's ABS_MT_TRACKING_ID event was received during SYN_DROPPED, the
- driver isn't aware that a touchpoint has started or ended in that slot. When
- the next ABS_MT_TRACKING_ID event arrives, the driver would unconditionally
- close or open a new touchpoint. This could lead to two or more touchpoints
- being opened in the same slot, the first of which is never terminated.
- Or it could lead to a touchpoint being terminated that was never opened.
+ Rely on INPUT_PROP_TOP_BUTTONPAD and default button areas as well.
- The event sequences that trigger this are:
- ABS_MT_TRACKING_ID 83
- ABS_MT_TRACKING_ID -1
- SYN_DROPPED // new touchpoint started here
- ABS_MT_TRACKING_ID -1
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit a31ecb669f40d8db3ab1867eaedfe364bbd6fafe
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Wed Apr 30 07:45:34 2014 +1000
+
+ synaptics 1.7.99.2
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit efa424b5c9c084c1c1136a68329709c7dc9ddfda
+Author: Clinton Sprain <clintonsprain@gmail.com>
+Date: Tue Apr 29 19:47:17 2014 -0500
+
+ Fix product ID cutoff for MODEL_APPLETOUCH/MODEL_UNIBODY_MACBOOK
+
+ 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>
+
+commit 7bf27568417691e772e715f8fc6c30ea7ec892d6
+Author: Hans de Goede <hdegoede@redhat.com>
+Date: Tue Apr 22 18:58:11 2014 +0200
+
+ Add support for INPUT_PROP_TOPBUTTONPAD
+
+ 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>
+
+commit 41afac2abf12dd74a171f726b57014f7fb266957
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Tue Apr 29 12:13:10 2014 +1000
+
+ man: add some missing quotes
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit a6f0f4c9a5bcb0e25343dd4c59d4cc47cc5e8006
+Author: Hans de Goede <hdegoede@redhat.com>
+Date: Fri Apr 11 20:41:36 2014 +0200
+
+ Always count tripletap + click as 3 fingerclick on pads with < 3 touches
+
+ 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>
+
+commit f183c1c38778b659b4c75a0e2c532dd5a9f8d437
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Wed Apr 9 10:41:29 2014 +1000
+
+ conf: add more PnPIDs and DMI matches for Lenovos
+
+ 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>
+
+commit 62ef210d11714703345dc8d35915ff53c37aee01
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Mon Apr 7 16:16:13 2014 +1000
+
+ Comment the touch states
+
+ 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>
+
+commit bfceb1bc580656aceb14e4b0f880bfcb3e4bc368
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Fri Apr 4 15:51:22 2014 +1000
+
+ eventcomm: Hook up the libevdev log handler
- and
+ 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.
- ABS_MT_TRACKING_ID 83
- SYN_DROPPED // touchpoint ended here
- ABS_MT_TRACKING_ID 84
- ABS_MT_TRACKING_ID -1
+ Use the lowest logging priority, let the server filter based on the verbosity
+ level instead.
- We don't properly handle SYN_DROPPED, but we can avoid this by only starting a
- new touchpoint when we transition between -1 and a valid tracking ID.
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Reviewed-by: Hans de Goede <hdegoede@redhat.com>
+
+commit 6ad856790630393bbd41b0bd7746ed9b0629a7c6
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Thu Apr 3 16:41:15 2014 +1000
+
+ eventcomm: read one more event after finishing a sync
+
+ 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>
-commit a21b3bd602b31ee995b391a7b917282e7b0a1c33
+commit bec41416dbbee73eef9eee122d0acacc148e329d
Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date: Thu Mar 20 10:58:53 2014 +1000
+Date: Thu Apr 3 15:42:45 2014 +1000
- eventcomm: drop assumption of non-zero slot offset
+ eventcomm: drop superflous helper function
- The kernel guarantees this is always 0
+ 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>
-commit 91cc1e82143b939bfb4fce97429b07105333e146
+commit f1948e08ee9894864254a18098e4f4fceb6e322f
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Wed Mar 19 15:08:15 2014 +1000
+
+ Disable GrabEventDevice by default
+
+ 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>
+
+commit fd709900445e3cb9f31ce7e780bfa98ecb6dab9b
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Tue Mar 18 07:28:44 2014 +1000
+
+ synaptics 1.7.99.1
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit dc5474964d4ec73b5c324961026e1037bb344946
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Mon Mar 17 14:55:37 2014 +1000
+
+ If the touchpad is in TOUCHPAD_OFF mode, allow physical clicks
+
+ 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>
+
+commit 4122db68f61c695eae3a65aec18db08b29898b6a
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Thu Mar 13 08:26:08 2014 +1000
+
+ conf: automatically enable the top softbutton area for the new Lenovos
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 18dae625eada20c4486542f9bb037fa2782d75bd
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Sun Aug 5 14:32:08 2012 +1000
+
+ conf: apply ClickPad softbuttons option through fdi file too (fixed version)
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit f2cb48e6eee47fa621edaaf2f75b495b12f6eb55
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Thu Mar 13 10:14:40 2014 +1000
+
+ Revert "conf: apply ClickPad softbuttons option through fdi file too"
+
+ Bad fdi file, type="string" is missing and it wouldn't merge properly.
+
+ This reverts commit a35b2d629d85d7a8c82621a5098a17e5ffb341dc.
+
+commit a35b2d629d85d7a8c82621a5098a17e5ffb341dc
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Sun Aug 5 14:32:08 2012 +1000
+
+ conf: apply ClickPad softbuttons option through fdi file too
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 17bbcad28000bbd896a33047c0720ada89e05f5d
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Wed Mar 12 14:11:29 2014 +1000
+
+ Revert "Add another third state to TouchpadOff for disabling all but button 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>
+
+commit b40a5255fe73f7f95c8ff7145dd91605f3430119
+Author: Stephen Chandler Paul <thatslyude@gmail.com>
+Date: Mon Mar 10 18:33:20 2014 -0400
+
+ Don't allow any type of movement starting in the top softbutton area
+
+ 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>
+
+commit 9a419ba01c53a38b4b601f4415801fca29a2b4e2
+Author: Stephen Chandler Paul <thatslyude@gmail.com>
+Date: Mon Mar 10 18:25:20 2014 -0400
+
+ Replace is_inside_anybutton_area with current_button_area
+
+ Signed-off-by: Stephen Chandler Paul <thatslyude@gmail.com>
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 2e5c0cf4395a0cf7b024495deab75f4ebe949e9a
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Mon Mar 10 16:43:54 2014 +1000
+
+ eventcomm: drop mtdev
+
+ 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>
+
+commit c90a76ab0e752be0be4d9d835289df05d783f979
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Mon Mar 10 16:35:45 2014 +1000
+
+ eventcomm: drop some use of mtdev
+
+ 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>
+
+commit 5b7e1726369d4973859996f225bec743c2e21288
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Mon Mar 10 16:42:34 2014 +1000
@@ -58,17 +325,248 @@ Date: Mon Mar 10 16:42:34 2014 +1000
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>
- (cherry picked from commit 5b7e1726369d4973859996f225bec743c2e21288)
-commit 8a5533aaa7e6e57bca7674de4cd25b3a18217d44
+commit 040dfeba6886b8e910fb6b347c283e60fe24a147
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Tue Mar 11 14:50:01 2014 +1000
+
+ eventcomm: fix wrong event code for SYN_REPORT
+
+ 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>
+
+commit 66240dc329683f0141c1e11590ea2c3d8ca25788
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Mon Mar 10 09:07:59 2014 +1000
+
+ Add property support for secondary (top) software buttons
+
+ 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>
+
+commit 80efc2f54f11a4d45411951f7055bfec2ed40fee
+Author: Hans de Goede <hdegoede@redhat.com>
+Date: Sat Mar 8 10:41:14 2014 +0100
+
+ synaptics: Add support for server managed fds
+
+ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit c431d900f54696f608312ea51b1fa671839f7d42
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Wed Feb 26 15:30:55 2014 +1000
+
+ man: fix documentation about the new touchpad state
+
+ leftover from an earlier revision
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit bbe4c56c4998a90b478581a4d93717251d8e05be
+Author: Hans de Goede <hdegoede@redhat.com>
+Date: Fri Feb 21 10:31:44 2014 +0100
+
+ Wait for *new* coordinates on a clickpad click before reporting the click
+
+ 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>
+
+commit 743c45b9cfd057d00c37dab1cfca4b6202fb2642
+Author: Hans de Goede <hdegoede@redhat.com>
+Date: Fri Feb 21 10:31:43 2014 +0100
+
+ On button down update cumulative to current x and y, instead of previous
+
+ 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>
+
+commit 71652fe1f0800b081ba5602e9edda22a8d8d628e
+Author: Hans de Goede <hdegoede@redhat.com>
+Date: Fri Feb 21 10:31:42 2014 +0100
+
+ Ignore motion the first X ms after a clickpad click
+
+ 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>
+
+commit 3adaf4623845dce54129b6474f4f8f2966f9bc47
+Author: Hans de Goede <hdegoede@redhat.com>
+Date: Fri Feb 21 10:31:41 2014 +0100
+
+ Don't report motion inside soft-button areas
+
+ 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>
+
+commit effeee86c1c286cd09ab750efc4932790dd560dd
+Author: Hans de Goede <hdegoede@redhat.com>
+Date: Fri Feb 21 10:31:40 2014 +0100
+
+ Get rid of old_hw_state
+
+ 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>
+
+commit 840670508e0150ae11ae744c676253c7fba332dc
+Author: Hans de Goede <hdegoede@redhat.com>
+Date: Fri Feb 21 10:31:39 2014 +0100
+
+ Add an enum for the different soft_button_areas
+
+ 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>
+
+commit eea73358760c7ff9c9dac061f265753637c6f25c
Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date: Wed Mar 12 09:42:38 2014 +1000
+Date: Fri Feb 21 10:31:37 2014 +0100
- synaptics 1.7.4
+ Add another third state to TouchpadOff for disabling all but button clicks
+
+ On a new set of laptops like the Lenovo T440 the trackstick does not have
+ physical buttons. Instead, the touchpad's top edge is supposed to acts
+ software button area. To avoid spurious cursor jumps when the trackstick is in
+ use and the finger is resting on the touchpad, add another mode that disables
+ motion events.
+ Enabled by syndaemon with -t click-only, the default stays unchanged. No
+ specific integration with the traditional disable-while-typing is needed. On
+ such touchpads, disabling motion events is sufficient to avoid spurious
+ events and we don't want to stop HW buttons to send events.
+
+ Note that this only adds the new state to the driver and to syndaemon, there
+ is nothing hooked up otherwise to actually monitor the trackstick.
+
+ Special note for syndaemon: optional arguments are a GNU extension, so work
+ around it by messing with an optstring starting with ":" which allows us to
+ manually parse the options.
+
+ Original version of this patch by John Pham <jhnphm@gmail.com>
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+ Reviewed-by: Hans de Goede <hdegoede@redhat.com>
+ Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit ac78616d074f2d248543411c106f0d1befeef58d
+Author: Keith Packard <keithp@keithp.com>
+Date: Sat Feb 22 01:44:38 2014 -0800
+
+ When re-opening evdev, set the fd before trying to grab
+
+ If we try to grab the evdev device before we've set the new file
+ descriptor, libevdev_grab returns -EFAULT, which causes DeviceOn to
+ fail.
+
+ Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-commit c189854a688465c820d5ef5767e00b69394a1601
+commit 22fe8bdc6668e78853768c62f4d1331114c7eca0
Author: Keith Packard <keithp@keithp.com>
Date: Sat Feb 22 01:44:37 2014 -0800
@@ -76,9 +574,60 @@ Date: Sat Feb 22 01:44:37 2014 -0800
Signed-off-by: Keith Packard <keithp@keithp.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
- (cherry picked from commit 22fe8bdc6668e78853768c62f4d1331114c7eca0)
-commit 503082bf17dfc4cb3d4b794ea514ac6f413c07f2
+commit 402cc872570b58b8420e7973d0706f3b2a2aaf91
+Author: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Date: Thu Feb 20 13:13:18 2014 -0500
+
+ Add secondary (top) software buttons area
+
+ New generation of laptops with trackstick do not have physical buttons
+ associated with the trackstick, but instead rely on software buttons at
+ the top of the clickpad.
+ Adding a secondary software button area for this purpose.
+ As we're likely detecting the devices that need it based on udev tags
+ and MatchTag configuration items, this area doesn't need to be exposed
+ through properties. So static configuration is fine.
+
+ Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+ Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+ [couple of man-page additions and rewrites]
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 945acfc261707be78cbc5438c22b061e20076004
+Author: Hans de Goede <hdegoede@redhat.com>
+Date: Wed Feb 19 18:30:35 2014 +0100
+
+ Allow using the entire touchpad for motions started inside the active area
+
+ synaptics offers an option to make parts of the touchpad insensitive. This
+ is ie useful to do palm avoidance rather then palm detection (which may be
+ unreliable) by disabling an area of 15% on the right and left side of the
+ touchpad.
+
+ Currently a motion which has started inside the active area, stops as soon
+ as it moves outside of the active area.
+
+ If a motion started inside the active area and thus has already generated some
+ move events, this makes no sense. If the user moves outside of the active
+ area in this case, this is very likely because the user wants to continue
+ the motion.
+
+ This commit allows such motions to continue normally.
+
+ I would like to thank Juerd Waalboer for the basic idea, some coding and lots
+ of testing for this fix.
+
+ Cc: Juerd Waalboer <juerd@tnx.nl>
+ Reported-by: Juerd Waalboer <juerd@tnx.nl>
+ Tested-by: Juerd Waalboer <juerd@tnx.nl>
+ 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>
+
+commit 2ea76fad6545a712713de1a09965158805e83c55
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Tue Feb 18 10:14:37 2014 +1000
@@ -91,9 +640,8 @@ Date: Tue Feb 18 10:14:37 2014 +1000
X.Org Bug 75074 <http://bugs.freedesktop.org/show_bug.cgi?id=75074>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
- (cherry picked from commit 2ea76fad6545a712713de1a09965158805e83c55)
-commit 0b70c76eab57822526585bbd11a1408bd115f26b
+commit 4f543ce1d6ae9ca11086a3009d149505590584a8
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Thu Feb 13 14:55:12 2014 +1000
@@ -108,9 +656,21 @@ Date: Thu Feb 13 14:55:12 2014 +1000
src/synaptics.c
Acked-by: Daniel Stone <daniel@fooishbar.org>
- (cherry picked from commit 4f543ce1d6ae9ca11086a3009d149505590584a8)
-commit 1bd4ca3b5af6e5ee98c7d7f153fd4ee643c29e1a
+commit 5d8cdaf4b1552c12fe6626059b9af4a6da6491e9
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Mon Feb 10 08:57:19 2014 +1000
+
+ Drop the half-baked test suite
+
+ This suite was never really maintained anyway, and it is quite hard to do so
+ anyway. The driver is linked to the server's API too tightly to easily do
+ independent testing. We need to re-implement stubs for the API the driver
+ uses, have to track API changes, etc. Not worth the effort.
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit e0069c154440305ece6def92a9813a9f8004b2fb
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Fri Jan 17 08:24:35 2014 +1000
@@ -125,35 +685,44 @@ Date: Fri Jan 17 08:24:35 2014 +1000
include/synaptics.h
man/synaptics.man
src/synaptics.c
+
+commit 48fbf44a3903bc6975add21be35586914a53c310
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Fri Jan 17 08:18:03 2014 +1000
+
+ Bump to 1.7.99
- (cherry picked from commit e0069c154440305ece6def92a9813a9f8004b2fb)
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-commit 90d93891be0dcc55d87c349ab438144ead818402
+commit 51b6bf3c1083638527b18696c2b682fd78c97070
Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date: Mon Jan 13 15:14:06 2014 +1000
+Date: Mon Dec 16 09:43:40 2013 +1000
- synaptics 1.7.3
+ On clickpads with two touchpoints, try to detect clickfinger 3 actions
+
+ Some touchpads provide BTN_TOOL_TRIPLETAP but do not track more than two
+ touchpoints. For those, try to detect clickfinger3 actions as best as we can.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+ (cherry picked from commit 9388b54a109bbd634e05611e6c90110d698f13d1)
-commit b227ca373de79fe6852ac09e71465c048790cd5b
+commit 49fe70e99d1b0932ab915824c78f952a0fdb3ee7
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Fri Jan 3 11:23:22 2014 +1000
Fix ABI detection for in-driver scaling
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
- (cherry picked from commit 49fe70e99d1b0932ab915824c78f952a0fdb3ee7)
-commit 88d926d12a1f5c06ee2825de5bc4b2222ec29c78
+commit 29318c1d94510cfb6d5d712e912af111f99edb42
Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date: Mon Dec 9 11:28:23 2013 +1000
+Date: Thu Dec 5 09:31:11 2013 +1000
- synaptics 1.7.2
+ Add missing property handler for the pressure motion factor
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-commit 61243ada3e1e10f6d32a899a6cc595efa244eb25
+commit 5d391e352f4e502ada6444a7ce860683e3480fbf
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Wed Dec 4 07:58:26 2013 +1000
@@ -162,21 +731,52 @@ Date: Wed Dec 4 07:58:26 2013 +1000
For symmetry, the kernel should ungrab when we close the fd.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 3b9267e5a67a153675174818114e390e17c61f2d
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Wed Nov 6 10:52:55 2013 +1000
+
+ Drop edge speed from get_delta
- [modified for the 1.7 branch which isn't using libevdev yet]
+ Always 0 anyway, and the feature was purged in
+ xf86-input-synaptics-1.6.0-8-g54f65f3
- (cherry picked from commit 5d391e352f4e502ada6444a7ce860683e3480fbf)
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-commit 09ac39309fbee01aa047dab1b0f577dc2571cdd1
+commit 0fc2679c4d148f9753e1964d7df8b00dc94401f6
Author: Peter Hutterer <peter.hutterer@who-t.net>
-Date: Thu Dec 5 09:31:11 2013 +1000
+Date: Mon Nov 4 15:23:39 2013 +1000
- Add missing property handler for the pressure motion factor
+ autogen.sh: support NOCONFIGURE=1
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 03b4faeadfb50b26452dd2f494540b0f5a8b7399
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Mon Nov 4 15:22:31 2013 +1000
+
+ Drop maintainer mode
+
+ Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 41840a656f5c790b49fe798b9d99136c23e09a5f
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Wed May 29 15:07:44 2013 +1000
+
+ Switch to libevdev for the eventcomm backend
+
+ 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 <peter.hutterer@who-t.net>
- (cherry picked from commit 29318c1d94510cfb6d5d712e912af111f99edb42)
-commit f4ddbde165843924195b08551d7d6d6200c44b23
+commit 0fb59b3487d57523a03f078a2061e2ea0cacbc7c
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Fri Jul 19 11:08:43 2013 +1000
@@ -187,7 +787,6 @@ Date: Fri Jul 19 11:08:43 2013 +1000
scale, so we deactivate those bits in the driver.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
- (cherry picked from commit 0fb59b3487d57523a03f078a2061e2ea0cacbc7c)
commit 96cf04dce19e7c90bc05b8b3b192b5bfb97381d2
Author: Peter Hutterer <peter.hutterer@who-t.net>
diff --git a/driver/xf86-input-synaptics/Makefile.am b/driver/xf86-input-synaptics/Makefile.am
index 9a74c15a5..13b1ba995 100644
--- a/driver/xf86-input-synaptics/Makefile.am
+++ b/driver/xf86-input-synaptics/Makefile.am
@@ -24,7 +24,7 @@ DISTCHECK_CONFIGURE_FLAGS = \
--with-sdkdir='$${includedir}/xorg' \
--with-xorg-conf-dir='$${datadir}/X11/xorg.conf.d'
-SUBDIRS = include src man tools test
+SUBDIRS = include src man tools
MAINTAINERCLEANFILES = ChangeLog INSTALL
pkgconfigdir = $(libdir)/pkgconfig
diff --git a/driver/xf86-input-synaptics/Makefile.in b/driver/xf86-input-synaptics/Makefile.in
index dbd851d7e..d83fcfdef 100644
--- a/driver/xf86-input-synaptics/Makefile.in
+++ b/driver/xf86-input-synaptics/Makefile.in
@@ -237,6 +237,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
+LIBEVDEV_CFLAGS = @LIBEVDEV_CFLAGS@
+LIBEVDEV_LIBS = @LIBEVDEV_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
@@ -245,15 +247,12 @@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MAN_SUBSTS = @MAN_SUBSTS@
MISC_MAN_DIR = @MISC_MAN_DIR@
MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
MKDIR_P = @MKDIR_P@
-MTDEV_CFLAGS = @MTDEV_CFLAGS@
-MTDEV_LIBS = @MTDEV_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -348,7 +347,7 @@ DISTCHECK_CONFIGURE_FLAGS = \
--with-sdkdir='$${includedir}/xorg' \
--with-xorg-conf-dir='$${datadir}/X11/xorg.conf.d'
-SUBDIRS = include src man tools test
+SUBDIRS = include src man tools
MAINTAINERCLEANFILES = ChangeLog INSTALL
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = xorg-synaptics.pc
@@ -358,7 +357,7 @@ all: config.h
.SUFFIXES:
am--refresh: Makefile
@:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -385,9 +384,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+$(top_srcdir)/configure: $(am__configure_deps)
$(am__cd) $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
$(am__aclocal_m4_deps):
@@ -398,7 +397,7 @@ config.h: stamp-h1
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
@rm -f stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status config.h
-$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+$(srcdir)/config.h.in: $(am__configure_deps)
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
rm -f stamp-h1
touch $@
diff --git a/driver/xf86-input-synaptics/aclocal.m4 b/driver/xf86-input-synaptics/aclocal.m4
index 875be2ece..ec19ced71 100644
--- a/driver/xf86-input-synaptics/aclocal.m4
+++ b/driver/xf86-input-synaptics/aclocal.m4
@@ -9386,44 +9386,6 @@ fi
rmdir .tst 2>/dev/null
AC_SUBST([am__leading_dot])])
-# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
-# From Jim Meyering
-
-# Copyright (C) 1996-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_MAINTAINER_MODE([DEFAULT-MODE])
-# ----------------------------------
-# Control maintainer-specific portions of Makefiles.
-# Default is to disable them, unless 'enable' is passed literally.
-# For symmetry, 'disable' may be passed as well. Anyway, the user
-# can override the default with the --enable/--disable switch.
-AC_DEFUN([AM_MAINTAINER_MODE],
-[m4_case(m4_default([$1], [disable]),
- [enable], [m4_define([am_maintainer_other], [disable])],
- [disable], [m4_define([am_maintainer_other], [enable])],
- [m4_define([am_maintainer_other], [enable])
- m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])])
-AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
- dnl maintainer-mode's default is 'disable' unless 'enable' is passed
- AC_ARG_ENABLE([maintainer-mode],
- [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
- am_maintainer_other[ make rules and dependencies not useful
- (and sometimes confusing) to the casual installer])],
- [USE_MAINTAINER_MODE=$enableval],
- [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
- AC_MSG_RESULT([$USE_MAINTAINER_MODE])
- AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
- MAINT=$MAINTAINER_MODE_TRUE
- AC_SUBST([MAINT])dnl
-]
-)
-
-AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
-
# Check to see how 'make' treats includes. -*- Autoconf -*-
# Copyright (C) 2001-2012 Free Software Foundation, Inc.
diff --git a/driver/xf86-input-synaptics/conf/11-x11-synaptics.fdi b/driver/xf86-input-synaptics/conf/11-x11-synaptics.fdi
index d487f0927..ab8156d2e 100644
--- a/driver/xf86-input-synaptics/conf/11-x11-synaptics.fdi
+++ b/driver/xf86-input-synaptics/conf/11-x11-synaptics.fdi
@@ -30,6 +30,11 @@
For other possible options, check CONFIGURATION DETAILS in synaptics man page
-->
+ <merge key="input.x11_options.SoftButtonAreas" type="string">50% 0 82% 0 0 0 0 0</merge>
+ <merge key="input.x11_options.SecondarySoftButtonAreas" type="string">58% 0 0 8% 42% 58% 0 8%</merge>
+ <match key="info.product" contains="Apple|bcm5974">
+ <merge key="input.x11_options.SoftButtonAreas" type="string">0 0 0 0 0 0 0 0</merge>
+ </match>
</match>
</device>
</deviceinfo>
diff --git a/driver/xf86-input-synaptics/conf/50-synaptics.conf b/driver/xf86-input-synaptics/conf/50-synaptics.conf
index dd16ca268..a3145b876 100644
--- a/driver/xf86-input-synaptics/conf/50-synaptics.conf
+++ b/driver/xf86-input-synaptics/conf/50-synaptics.conf
@@ -25,16 +25,15 @@ Section "InputClass"
Option "Ignore" "on"
EndSection
-# This option enables the bottom right corner to be a right button on
-# non-synaptics clickpads.
+# This option enables the bottom right corner to be a right button on clickpads
+# and the right and middle top areas to be right / middle buttons on clickpads
+# with a top button area.
# This option is only interpreted by clickpads.
Section "InputClass"
Identifier "Default clickpad buttons"
MatchDriver "synaptics"
Option "SoftButtonAreas" "50% 0 82% 0 0 0 0 0"
-# To disable the bottom edge area so the buttons only work as buttons,
-# not for movement, set the AreaBottomEdge
-# Option "AreaBottomEdge" "82%"
+ Option "SecondarySoftButtonAreas" "58% 0 0 8% 42% 58% 0 8%"
EndSection
# This option disables software buttons on Apple touchpads.
diff --git a/driver/xf86-input-synaptics/conf/Makefile.in b/driver/xf86-input-synaptics/conf/Makefile.in
index cbf3a9b4b..483f3295a 100644
--- a/driver/xf86-input-synaptics/conf/Makefile.in
+++ b/driver/xf86-input-synaptics/conf/Makefile.in
@@ -177,6 +177,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
+LIBEVDEV_CFLAGS = @LIBEVDEV_CFLAGS@
+LIBEVDEV_LIBS = @LIBEVDEV_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
@@ -185,15 +187,12 @@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MAN_SUBSTS = @MAN_SUBSTS@
MISC_MAN_DIR = @MISC_MAN_DIR@
MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
MKDIR_P = @MKDIR_P@
-MTDEV_CFLAGS = @MTDEV_CFLAGS@
-MTDEV_LIBS = @MTDEV_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -287,7 +286,7 @@ top_srcdir = @top_srcdir@
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -312,9 +311,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
diff --git a/driver/xf86-input-synaptics/configure b/driver/xf86-input-synaptics/configure
index fa28a028d..bcdbe5df0 100755
--- a/driver/xf86-input-synaptics/configure
+++ b/driver/xf86-input-synaptics/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for xf86-input-synaptics 1.7.5.
+# Generated by GNU Autoconf 2.69 for xf86-input-synaptics 1.8.0.
#
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
#
@@ -591,8 +591,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='xf86-input-synaptics'
PACKAGE_TARNAME='xf86-input-synaptics'
-PACKAGE_VERSION='1.7.5'
-PACKAGE_STRING='xf86-input-synaptics 1.7.5'
+PACKAGE_VERSION='1.8.0'
+PACKAGE_STRING='xf86-input-synaptics 1.8.0'
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
PACKAGE_URL=''
@@ -649,8 +649,8 @@ BUILD_PSMCOMM_FALSE
BUILD_PSMCOMM_TRUE
BUILD_EVENTCOMM_FALSE
BUILD_EVENTCOMM_TRUE
-MTDEV_LIBS
-MTDEV_CFLAGS
+LIBEVDEV_LIBS
+LIBEVDEV_CFLAGS
DEBUG_FALSE
DEBUG_TRUE
HAS_XORG_CONF_DIR_FALSE
@@ -736,9 +736,6 @@ build_vendor
build_cpu
build
LIBTOOL
-MAINT
-MAINTAINER_MODE_FALSE
-MAINTAINER_MODE_TRUE
am__untar
am__tar
AMTAR
@@ -803,7 +800,6 @@ SHELL'
ac_subst_files=''
ac_user_opts='
enable_option_checking
-enable_maintainer_mode
enable_static
enable_shared
with_pic
@@ -836,8 +832,8 @@ PKG_CONFIG_LIBDIR
XORG_MALLOC_DEBUG_ENV
XORG_CFLAGS
XORG_LIBS
-MTDEV_CFLAGS
-MTDEV_LIBS
+LIBEVDEV_CFLAGS
+LIBEVDEV_LIBS
XI_CFLAGS
XI_LIBS
XTST_CFLAGS
@@ -1382,7 +1378,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures xf86-input-synaptics 1.7.5 to adapt to many kinds of systems.
+\`configure' configures xf86-input-synaptics 1.8.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1453,7 +1449,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of xf86-input-synaptics 1.7.5:";;
+ short | recursive ) echo "Configuration of xf86-input-synaptics 1.8.0:";;
esac
cat <<\_ACEOF
@@ -1461,9 +1457,6 @@ Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-maintainer-mode
- enable make rules and dependencies not useful (and
- sometimes confusing) to the casual installer
--enable-static[=PKGS] build static libraries [default=no]
--enable-shared[=PKGS] build shared libraries [default=yes]
--enable-fast-install[=PKGS]
@@ -1518,9 +1511,10 @@ Some influential environment variables:
Environment variables to enable memory checking in tests
XORG_CFLAGS C compiler flags for XORG, overriding pkg-config
XORG_LIBS linker flags for XORG, overriding pkg-config
- MTDEV_CFLAGS
- C compiler flags for MTDEV, overriding pkg-config
- MTDEV_LIBS linker flags for MTDEV, overriding pkg-config
+ LIBEVDEV_CFLAGS
+ C compiler flags for LIBEVDEV, overriding pkg-config
+ LIBEVDEV_LIBS
+ linker flags for LIBEVDEV, overriding pkg-config
XI_CFLAGS C compiler flags for XI, overriding pkg-config
XI_LIBS linker flags for XI, overriding pkg-config
XTST_CFLAGS C compiler flags for XTST, overriding pkg-config
@@ -1592,7 +1586,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-xf86-input-synaptics configure 1.7.5
+xf86-input-synaptics configure 1.8.0
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1916,7 +1910,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by xf86-input-synaptics $as_me 1.7.5, which was
+It was created by xf86-input-synaptics $as_me 1.8.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2745,7 +2739,7 @@ fi
# Define the identity of the package.
PACKAGE='xf86-input-synaptics'
- VERSION='1.7.5'
+ VERSION='1.8.0'
cat >>confdefs.h <<_ACEOF
@@ -2792,29 +2786,6 @@ am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
-$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
- # Check whether --enable-maintainer-mode was given.
-if test "${enable_maintainer_mode+set}" = set; then :
- enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
-else
- USE_MAINTAINER_MODE=no
-fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
-$as_echo "$USE_MAINTAINER_MODE" >&6; }
- if test $USE_MAINTAINER_MODE = yes; then
- MAINTAINER_MODE_TRUE=
- MAINTAINER_MODE_FALSE='#'
-else
- MAINTAINER_MODE_TRUE='#'
- MAINTAINER_MODE_FALSE=
-fi
-
- MAINT=$MAINTAINER_MODE_TRUE
-
-
-
# Initialize libtool
# Check whether --enable-static was given.
if test "${enable_static+set}" = set; then :
@@ -17950,22 +17921,20 @@ if test "x$BUILD_EVENTCOMM" = xyes; then
$as_echo "#define BUILD_EVENTCOMM 1" >>confdefs.h
- # Obtain compiler/linker options for mtdev
-
pkg_failed=no
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for MTDEV" >&5
-$as_echo_n "checking for MTDEV... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBEVDEV" >&5
+$as_echo_n "checking for LIBEVDEV... " >&6; }
-if test -n "$MTDEV_CFLAGS"; then
- pkg_cv_MTDEV_CFLAGS="$MTDEV_CFLAGS"
+if test -n "$LIBEVDEV_CFLAGS"; then
+ pkg_cv_LIBEVDEV_CFLAGS="$LIBEVDEV_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mtdev\""; } >&5
- ($PKG_CONFIG --exists --print-errors "mtdev") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libevdev >= 0.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libevdev >= 0.4") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_MTDEV_CFLAGS=`$PKG_CONFIG --cflags "mtdev" 2>/dev/null`
+ pkg_cv_LIBEVDEV_CFLAGS=`$PKG_CONFIG --cflags "libevdev >= 0.4" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -17973,16 +17942,16 @@ fi
else
pkg_failed=untried
fi
-if test -n "$MTDEV_LIBS"; then
- pkg_cv_MTDEV_LIBS="$MTDEV_LIBS"
+if test -n "$LIBEVDEV_LIBS"; then
+ pkg_cv_LIBEVDEV_LIBS="$LIBEVDEV_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"mtdev\""; } >&5
- ($PKG_CONFIG --exists --print-errors "mtdev") 2>&5
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libevdev >= 0.4\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libevdev >= 0.4") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- pkg_cv_MTDEV_LIBS=`$PKG_CONFIG --libs "mtdev" 2>/dev/null`
+ pkg_cv_LIBEVDEV_LIBS=`$PKG_CONFIG --libs "libevdev >= 0.4" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
@@ -18003,22 +17972,22 @@ else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
- MTDEV_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "mtdev" 2>&1`
+ LIBEVDEV_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libevdev >= 0.4" 2>&1`
else
- MTDEV_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "mtdev" 2>&1`
+ LIBEVDEV_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libevdev >= 0.4" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
- echo "$MTDEV_PKG_ERRORS" >&5
+ echo "$LIBEVDEV_PKG_ERRORS" >&5
- as_fn_error $? "Package requirements (mtdev) were not met:
+ as_fn_error $? "Package requirements (libevdev >= 0.4) were not met:
-$MTDEV_PKG_ERRORS
+$LIBEVDEV_PKG_ERRORS
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
-Alternatively, you may set the environment variables MTDEV_CFLAGS
-and MTDEV_LIBS to avoid the need to call pkg-config.
+Alternatively, you may set the environment variables LIBEVDEV_CFLAGS
+and LIBEVDEV_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details." "$LINENO" 5
elif test $pkg_failed = untried; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
@@ -18029,15 +17998,15 @@ as_fn_error $? "The pkg-config script could not be found or is too old. Make su
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.
-Alternatively, you may set the environment variables MTDEV_CFLAGS
-and MTDEV_LIBS to avoid the need to call pkg-config.
+Alternatively, you may set the environment variables LIBEVDEV_CFLAGS
+and LIBEVDEV_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
To get pkg-config, see <http://pkg-config.freedesktop.org/>.
See \`config.log' for more details" "$LINENO" 5; }
else
- MTDEV_CFLAGS=$pkg_cv_MTDEV_CFLAGS
- MTDEV_LIBS=$pkg_cv_MTDEV_LIBS
+ LIBEVDEV_CFLAGS=$pkg_cv_LIBEVDEV_CFLAGS
+ LIBEVDEV_LIBS=$pkg_cv_LIBEVDEV_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
@@ -18291,7 +18260,7 @@ if test "${with_sdkdir+set}" = set; then :
fi
-ac_config_files="$ac_config_files Makefile src/Makefile man/Makefile tools/Makefile conf/Makefile include/Makefile test/Makefile xorg-synaptics.pc"
+ac_config_files="$ac_config_files Makefile src/Makefile man/Makefile tools/Makefile conf/Makefile include/Makefile xorg-synaptics.pc"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@@ -18418,10 +18387,6 @@ else
am__EXEEXT_FALSE=
fi
-if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
- as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
as_fn_error $? "conditional \"AMDEP\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -18855,7 +18820,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by xf86-input-synaptics $as_me 1.7.5, which was
+This file was extended by xf86-input-synaptics $as_me 1.8.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -18921,7 +18886,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-xf86-input-synaptics config.status 1.7.5
+xf86-input-synaptics config.status 1.8.0
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -19336,7 +19301,6 @@ do
"tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
"conf/Makefile") CONFIG_FILES="$CONFIG_FILES conf/Makefile" ;;
"include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
- "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
"xorg-synaptics.pc") CONFIG_FILES="$CONFIG_FILES xorg-synaptics.pc" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
diff --git a/driver/xf86-input-synaptics/configure.ac b/driver/xf86-input-synaptics/configure.ac
index a57c51df1..18419bde5 100644
--- a/driver/xf86-input-synaptics/configure.ac
+++ b/driver/xf86-input-synaptics/configure.ac
@@ -23,7 +23,7 @@
# Initialize Autoconf
AC_PREREQ([2.60])
AC_INIT([xf86-input-synaptics],
- [1.7.5],
+ [1.8.0],
[https://bugs.freedesktop.org/enter_bug.cgi?product=xorg],
[xf86-input-synaptics])
AC_CONFIG_SRCDIR([Makefile.am])
@@ -32,7 +32,6 @@ AC_CONFIG_AUX_DIR(.)
# Initialize Automake
AM_INIT_AUTOMAKE([foreign dist-bzip2])
-AM_MAINTAINER_MODE
# Initialize libtool
AC_DISABLE_STATIC
@@ -121,9 +120,7 @@ case "${host}" in
esac
if test "x$BUILD_EVENTCOMM" = xyes; then
AC_DEFINE(BUILD_EVENTCOMM, 1, [Optional backend eventcomm enabled])
-
- # Obtain compiler/linker options for mtdev
- PKG_CHECK_MODULES(MTDEV, mtdev)
+ PKG_CHECK_MODULES(LIBEVDEV, [libevdev >= 0.4])
fi
if test "x$BUILD_PSMCOMM" = xyes; then
AC_DEFINE(BUILD_PSMCOMM, 1, [Optional backend psmcomm enabled])
@@ -168,7 +165,6 @@ AC_CONFIG_FILES([Makefile
tools/Makefile
conf/Makefile
include/Makefile
- test/Makefile
xorg-synaptics.pc])
AC_OUTPUT
diff --git a/driver/xf86-input-synaptics/include/Makefile.in b/driver/xf86-input-synaptics/include/Makefile.in
index 579a1b316..e85c8a38f 100644
--- a/driver/xf86-input-synaptics/include/Makefile.in
+++ b/driver/xf86-input-synaptics/include/Makefile.in
@@ -177,6 +177,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
+LIBEVDEV_CFLAGS = @LIBEVDEV_CFLAGS@
+LIBEVDEV_LIBS = @LIBEVDEV_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
@@ -185,15 +187,12 @@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MAN_SUBSTS = @MAN_SUBSTS@
MISC_MAN_DIR = @MISC_MAN_DIR@
MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
MKDIR_P = @MKDIR_P@
-MTDEV_CFLAGS = @MTDEV_CFLAGS@
-MTDEV_LIBS = @MTDEV_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -285,7 +284,7 @@ sdk_HEADERS = synaptics-properties.h
all: all-am
.SUFFIXES:
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -310,9 +309,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
diff --git a/driver/xf86-input-synaptics/include/synaptics-properties.h b/driver/xf86-input-synaptics/include/synaptics-properties.h
index 19bd2b270..32ab2e1f0 100644
--- a/driver/xf86-input-synaptics/include/synaptics-properties.h
+++ b/driver/xf86-input-synaptics/include/synaptics-properties.h
@@ -152,6 +152,9 @@
/* 32 bit, 4 values, left, right, top, buttom */
#define SYNAPTICS_PROP_SOFTBUTTON_AREAS "Synaptics Soft Button Areas"
+/* 32 bit, 4 values, left, right, top, buttom */
+#define SYNAPTICS_PROP_SECONDARY_SOFTBUTTON_AREAS "Synaptics Secondary Soft Button Areas"
+
/* 32 Bit Integer, 2 values, horizontal hysteresis, vertical hysteresis */
#define SYNAPTICS_PROP_NOISE_CANCELLATION "Synaptics Noise Cancellation"
diff --git a/driver/xf86-input-synaptics/man/Makefile.in b/driver/xf86-input-synaptics/man/Makefile.in
index ad9485269..2b85ef9fc 100644
--- a/driver/xf86-input-synaptics/man/Makefile.in
+++ b/driver/xf86-input-synaptics/man/Makefile.in
@@ -178,6 +178,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
+LIBEVDEV_CFLAGS = @LIBEVDEV_CFLAGS@
+LIBEVDEV_LIBS = @LIBEVDEV_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
@@ -186,15 +188,12 @@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MAN_SUBSTS = @MAN_SUBSTS@
MISC_MAN_DIR = @MISC_MAN_DIR@
MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
MKDIR_P = @MKDIR_P@
-MTDEV_CFLAGS = @MTDEV_CFLAGS@
-MTDEV_LIBS = @MTDEV_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -298,7 +297,7 @@ all: all-am
.SUFFIXES:
.SUFFIXES: .$(DRIVER_MAN_SUFFIX) .man .$(APP_MAN_SUFFIX)
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -323,9 +322,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
diff --git a/driver/xf86-input-synaptics/man/synaptics.man b/driver/xf86-input-synaptics/man/synaptics.man
index 7da752772..76756be55 100644
--- a/driver/xf86-input-synaptics/man/synaptics.man
+++ b/driver/xf86-input-synaptics/man/synaptics.man
@@ -261,9 +261,14 @@ Valid values are:
.TS
l l.
0 Touchpad is enabled
-1 Touchpad is switched off
+1 Touchpad is switched off (physical clicks still work)
2 Only tapping and scrolling is switched off
.TE
+When the touchpad is switched off, button events caused by a physical
+button press are still interpreted. On a ClickPad, this includes
+software-emulated middle and right buttons as defined by
+the SoftButtonAreas setting.
+.TP
Property: "Synaptics Off"
.TP
.BI "Option \*qLockedDrags\*q \*q" boolean \*q
@@ -441,7 +446,7 @@ Property: "Synaptics Pad Resolution"
.
.TP
.BI "Option \*qAreaLeftEdge\*q \*q" integer \*q
-Ignore movements, scrolling and tapping which take place left of this edge.
+Ignore movements, scrolling and tapping which start left of this edge.
.
The option is disabled by default and can be enabled by setting the
AreaLeftEdge option to any integer value other than zero. If supported by the
@@ -450,7 +455,7 @@ the total width of the touchpad. Property: "Synaptics Area"
.
.TP
.BI "Option \*qAreaRightEdge\*q \*q" integer \*q
-Ignore movements, scrolling and tapping which take place right of this edge.
+Ignore movements, scrolling and tapping which start right of this edge.
.
The option is disabled by default and can be enabled by setting the
AreaRightEdge option to any integer value other than zero. If supported by the
@@ -459,7 +464,7 @@ the total width of the touchpad. Property: "Synaptics Area"
.
.TP
.BI "Option \*qAreaTopEdge\*q \*q" integer \*q
-Ignore movements, scrolling and tapping which take place above this edge.
+Ignore movements, scrolling and tapping which start above this edge.
.
The option is disabled by default and can be enabled by setting the
AreaTopEdge option to any integer value other than zero. If supported by the
@@ -468,7 +473,7 @@ the total height of the touchpad. Property: "Synaptics Area"
.
.TP
.BI "Option \*qAreaBottomEdge\*q \*q" integer \*q
-Ignore movements, scrolling and tapping which take place below this edge.
+Ignore movements, scrolling and tapping which start below this edge.
.
The option is disabled by default and can be enabled by setting the
AreaBottomEdge option to any integer value other than zero. If supported by the
@@ -489,6 +494,30 @@ soft button areas. Button areas may not overlap, however it is permitted for two
buttons to share an edge value.
Property: "Synaptics Soft Button Areas"
.
+.TP
+.BI "Option \*qHasSecondarySoftButtons\*q \*q" boolean \*q
+This option is only available on ClickPad devices.
+Enable the secondary software button area support. The exact area must be
+set in option \*qSecondarySoftButtonAreas\*q. See
+.B ClickPad support
+for more details.
+.
+.TP
+.BI "Option \*qSecondarySoftButtonAreas\*q \*q" "RBL RBR RBT RBB MBL MBR MBT MBB" \*q
+This option is only available on ClickPad devices and only if
+.B Option \*qHasSecondarySoftButtons\*q
+is enabled.
+Define the secondary soft button click areas on ClickPad devices (usually on
+top of the device).
+For the allowed values for this option, see
+.B Option \*qSoftButtonAreas\*q.
+Primary and secondary soft button areas must not overlap each other. If they do,
+the behavior of the driver is undefined.
+Property: "Synaptics Secondary Soft Button Areas". This property is only
+initialized if
+.B Option \*qHasSecondarySoftButtons\*q
+is enabled and this option is set in the __xconfigfile__(__filemansuffix__).
+.
.SH CONFIGURATION DETAILS
.SS Area handling
@@ -532,9 +561,10 @@ the touchpad.
.PP
The perceived physical edges may be adjusted with the AreaLeftEdge,
AreaRightEdge, AreaTopEdge, and AreaBottomEdge options. If these values are
-set to something other than the physical edges, input in the space between
-the area edge and the respective physical edge is ignored. Note that this
-reduces the available space on the touchpad.
+set to something other than the physical edges, input that starts in the
+space between the area edge and the respective physical edge is ignored.
+Note that this reduces the available space on the touchpad to start motions
+in.
.SS Tapping
A tap event happens when the finger is touched and released in a time
interval shorter than MaxTapTime, and the touch and release
@@ -703,10 +733,22 @@ support at runime, the user must also set the middle mouse button timeout to
driver.
.LP
ClickPads provide software emulated buttons through
-.B Option SoftButtonAreas.
+.B Option \*qSoftButtonAreas\*q.
These buttons enable areas on the touchpad to perform as right or middle
mouse button. When the user performs a click within a defined soft button
area, a right or middle click is performed.
+.LP
+Some laptops, most notably the Lenovo T440, T540 and x240 series, provide a
+pointing stick without physical buttons. On those laptops, the top of the
+touchpad acts as software-emulated button area. This area can be enabled
+with
+.B Option \*qHasSecondarySoftButtons\*q
+and configured
+with
+.B Option \*qSecondarySoftButtonAreas\*q.
+On some platforms, this option
+will be set automatically if the kernel detects a matching device. On Linux,
+the device must have the INPUT_PROP_TOPBUTTONPAD property set.
.SH "DEVICE PROPERTIES"
Synaptics 1.0 and higher support input device properties if the driver is
diff --git a/driver/xf86-input-synaptics/src/Makefile.am b/driver/xf86-input-synaptics/src/Makefile.am
index 79ac99884..a057b3c8e 100644
--- a/driver/xf86-input-synaptics/src/Makefile.am
+++ b/driver/xf86-input-synaptics/src/Makefile.am
@@ -48,7 +48,8 @@ if BUILD_EVENTCOMM
synaptics_drv_la_SOURCES += \
eventcomm.c eventcomm.h
synaptics_drv_la_LIBADD = \
- $(MTDEV_LIBS)
+ $(LIBEVDEV_LIBS)
+AM_CPPFLAGS += $(LIBEVDEV_CFLAGS)
endif
if BUILD_PSMCOMM
diff --git a/driver/xf86-input-synaptics/src/Makefile.in b/driver/xf86-input-synaptics/src/Makefile.in
index 50720cefa..61ffca2a2 100644
--- a/driver/xf86-input-synaptics/src/Makefile.in
+++ b/driver/xf86-input-synaptics/src/Makefile.in
@@ -77,10 +77,11 @@ host_triplet = @host@
@BUILD_EVENTCOMM_TRUE@am__append_2 = \
@BUILD_EVENTCOMM_TRUE@ eventcomm.c eventcomm.h
-@BUILD_PSMCOMM_TRUE@am__append_3 = \
+@BUILD_EVENTCOMM_TRUE@am__append_3 = $(LIBEVDEV_CFLAGS)
+@BUILD_PSMCOMM_TRUE@am__append_4 = \
@BUILD_PSMCOMM_TRUE@ psmcomm.c
-@BUILD_WSCONSCOMM_TRUE@am__append_4 = \
+@BUILD_WSCONSCOMM_TRUE@am__append_5 = \
@BUILD_WSCONSCOMM_TRUE@ wsconscomm.c
subdir = src
@@ -234,6 +235,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
+LIBEVDEV_CFLAGS = @LIBEVDEV_CFLAGS@
+LIBEVDEV_LIBS = @LIBEVDEV_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
@@ -242,15 +245,12 @@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MAN_SUBSTS = @MAN_SUBSTS@
MISC_MAN_DIR = @MISC_MAN_DIR@
MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
MKDIR_P = @MKDIR_P@
-MTDEV_CFLAGS = @MTDEV_CFLAGS@
-MTDEV_LIBS = @MTDEV_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -347,19 +347,19 @@ top_srcdir = @top_srcdir@
synaptics_drv_la_LTLIBRARIES = synaptics_drv.la
synaptics_drv_la_LDFLAGS = -module -avoid-version
synaptics_drv_ladir = @inputdir@
-AM_CPPFLAGS = -I$(top_srcdir)/include
+AM_CPPFLAGS = -I$(top_srcdir)/include $(am__append_3)
AM_CFLAGS = $(XORG_CFLAGS)
synaptics_drv_la_SOURCES = synaptics.c synapticsstr.h synproto.c \
synproto.h properties.c $(am__append_1) $(am__append_2) \
- $(am__append_3) $(am__append_4)
+ $(am__append_4) $(am__append_5)
@BUILD_EVENTCOMM_TRUE@synaptics_drv_la_LIBADD = \
-@BUILD_EVENTCOMM_TRUE@ $(MTDEV_LIBS)
+@BUILD_EVENTCOMM_TRUE@ $(LIBEVDEV_LIBS)
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -384,9 +384,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-synaptics_drv_laLTLIBRARIES: $(synaptics_drv_la_LTLIBRARIES)
diff --git a/driver/xf86-input-synaptics/src/eventcomm.c b/driver/xf86-input-synaptics/src/eventcomm.c
index 68e4f29ef..37de38a54 100644
--- a/driver/xf86-input-synaptics/src/eventcomm.c
+++ b/driver/xf86-input-synaptics/src/eventcomm.c
@@ -42,7 +42,7 @@
#include "synproto.h"
#include "synapticsstr.h"
#include <xf86.h>
-#include <mtdev.h>
+#include <libevdev/libevdev.h>
#ifndef INPUT_PROP_BUTTONPAD
#define INPUT_PROP_BUTTONPAD 0x02
@@ -50,6 +50,12 @@
#ifndef INPUT_PROP_SEMI_MT
#define INPUT_PROP_SEMI_MT 0x03
#endif
+#ifndef INPUT_PROP_TOPBUTTONPAD
+#define INPUT_PROP_TOPBUTTONPAD 0x04
+#endif
+#ifndef ABS_MT_TOOL_Y
+#define ABS_MT_TOOL_Y 0x3d
+#endif
#define SYSCALL(call) while (((call) == -1) && (errno == EINTR))
@@ -59,6 +65,10 @@
#define LONG(x) ((x) / LONG_BITS)
#define TEST_BIT(bit, array) ((array[LONG(bit)] >> OFF(bit)) & 1)
+#define ABS_MT_MIN ABS_MT_SLOT
+#define ABS_MT_MAX ABS_MT_TOOL_Y
+#define ABS_MT_CNT (ABS_MT_MAX - ABS_MT_MIN + 1)
+
/**
* Protocol-specific data.
*/
@@ -71,18 +81,54 @@ struct eventcomm_proto_data {
BOOL need_grab;
int st_to_mt_offset[2];
double st_to_mt_scale[2];
- struct mtdev *mtdev;
- int axis_map[MT_ABS_SIZE];
+ int axis_map[ABS_MT_CNT];
int cur_slot;
ValuatorMask **last_mt_vals;
int num_touches;
- int *tracking_ids;
+
+ struct libevdev *evdev;
+ enum libevdev_read_flag read_flag;
};
+static void
+libevdev_log_func(enum libevdev_log_priority priority,
+ void *data,
+ const char *file, int line, const char *func,
+ const char *format, va_list args)
+_X_ATTRIBUTE_PRINTF(6, 0);
+
+static void
+libevdev_log_func(enum libevdev_log_priority priority,
+ void *data,
+ const char *file, int line, const char *func,
+ const char *format, va_list args)
+{
+ int verbosity;
+
+ switch(priority) {
+ case LIBEVDEV_LOG_ERROR: verbosity = 0; break;
+ case LIBEVDEV_LOG_INFO: verbosity = 4; break;
+ case LIBEVDEV_LOG_DEBUG: verbosity = 10; break;
+ }
+
+ LogVMessageVerbSigSafe(X_NOTICE, verbosity, format, args);
+}
+
+static void
+set_libevdev_log_handler(void)
+{
+ /* be quiet, gcc *handwave* */
+ libevdev_set_log_function((libevdev_log_func_t)libevdev_log_func, NULL);
+ libevdev_set_log_priority(LIBEVDEV_LOG_DEBUG);
+}
+
struct eventcomm_proto_data *
-EventProtoDataAlloc(void)
+EventProtoDataAlloc(int fd)
{
struct eventcomm_proto_data *proto_data;
+ int rc;
+
+ set_libevdev_log_handler();
proto_data = calloc(1, sizeof(struct eventcomm_proto_data));
if (!proto_data)
@@ -91,17 +137,14 @@ EventProtoDataAlloc(void)
proto_data->st_to_mt_scale[0] = 1;
proto_data->st_to_mt_scale[1] = 1;
- return proto_data;
-}
-
-static int
-last_mt_vals_slot(const SynapticsPrivate * priv)
-{
- struct eventcomm_proto_data *proto_data =
- (struct eventcomm_proto_data *) priv->proto_data;
- int value = proto_data->cur_slot;
+ rc = libevdev_new_from_fd(fd, &proto_data->evdev);
+ if (rc < 0) {
+ free(proto_data);
+ proto_data = NULL;
+ } else
+ proto_data->read_flag = LIBEVDEV_READ_FLAG_NORMAL;
- return value < priv->num_slots ? value : -1;
+ return proto_data;
}
static void
@@ -123,12 +166,7 @@ UninitializeTouch(InputInfoPtr pInfo)
proto_data->last_mt_vals = NULL;
}
- mtdev_close_delete(proto_data->mtdev);
- proto_data->mtdev = NULL;
proto_data->num_touches = 0;
-
- free(proto_data->tracking_ids);
- proto_data->tracking_ids = NULL;
}
static void
@@ -142,14 +180,7 @@ InitializeTouch(InputInfoPtr pInfo)
if (!priv->has_touch)
return;
- proto_data->mtdev = mtdev_new_open(pInfo->fd);
- if (!proto_data->mtdev) {
- xf86IDrvMsg(pInfo, X_WARNING,
- "failed to create mtdev instance, ignoring touch events\n");
- return;
- }
-
- proto_data->cur_slot = proto_data->mtdev->caps.slot.value;
+ proto_data->cur_slot = libevdev_get_current_slot(proto_data->evdev);
proto_data->num_touches = 0;
proto_data->last_mt_vals = calloc(priv->num_slots, sizeof(ValuatorMask *));
@@ -160,18 +191,9 @@ InitializeTouch(InputInfoPtr pInfo)
return;
}
- proto_data->tracking_ids = calloc(priv->num_slots, sizeof(int));
- if (!proto_data->tracking_ids) {
- xf86IDrvMsg(pInfo, X_WARNING, "failed to allocate tracking ID array\n");
- UninitializeTouch(pInfo);
- return;
- }
-
for (i = 0; i < priv->num_slots; i++) {
int j;
- proto_data->tracking_ids[i] = -1;
-
proto_data->last_mt_vals[i] = valuator_mask_new(4 + priv->num_mt_axes);
if (!proto_data->last_mt_vals[i]) {
xf86IDrvMsg(pInfo, X_WARNING,
@@ -196,14 +218,32 @@ EventDeviceOnHook(InputInfoPtr pInfo, SynapticsParameters * para)
struct eventcomm_proto_data *proto_data =
(struct eventcomm_proto_data *) priv->proto_data;
+ set_libevdev_log_handler();
+
+ if (libevdev_get_fd(proto_data->evdev) != -1) {
+ struct input_event ev;
+
+ libevdev_change_fd(proto_data->evdev, pInfo->fd);
+
+ /* re-sync libevdev's state, but we don't care about the actual
+ events here */
+ libevdev_next_event(proto_data->evdev, LIBEVDEV_READ_FLAG_FORCE_SYNC, &ev);
+ while (libevdev_next_event(proto_data->evdev,
+ LIBEVDEV_READ_FLAG_SYNC, &ev) == LIBEVDEV_READ_STATUS_SYNC)
+ ;
+
+ } else
+ libevdev_set_fd(proto_data->evdev, pInfo->fd);
+
+
if (para->grab_event_device) {
/* Try to grab the event device so that data don't leak to /dev/input/mice */
int ret;
- SYSCALL(ret = ioctl(pInfo->fd, EVIOCGRAB, (pointer) 1));
+ ret = libevdev_grab(proto_data->evdev, LIBEVDEV_GRAB);
if (ret < 0) {
xf86IDrvMsg(pInfo, X_WARNING, "can't grab event device, errno=%d\n",
- errno);
+ -ret);
return FALSE;
}
}
@@ -218,8 +258,13 @@ EventDeviceOnHook(InputInfoPtr pInfo, SynapticsParameters * para)
static Bool
EventDeviceOffHook(InputInfoPtr pInfo)
{
+ SynapticsPrivate *priv = (SynapticsPrivate *) pInfo->private;
+ struct eventcomm_proto_data *proto_data = priv->proto_data;
+
UninitializeTouch(pInfo);
- SYSCALL(ioctl(pInfo->fd, EVIOCGRAB, (pointer) 0));
+ libevdev_grab(proto_data->evdev, LIBEVDEV_UNGRAB);
+ libevdev_set_log_function(NULL, NULL);
+ libevdev_set_log_priority(LIBEVDEV_LOG_INFO); /* reset to default */
return Success;
}
@@ -232,59 +277,48 @@ EventDeviceOffHook(InputInfoPtr pInfo)
* - BTN_TOOL_FINGER
* - BTN_TOOL_PEN is _not_ set
*
- * @param fd The file descriptor to an event device.
+ * @param evdev Libevdev handle
* @param test_grab If true, test whether an EVIOCGRAB is possible on the
* device. A failure to grab the event device returns in a failure.
*
* @return TRUE if the device is a touchpad or FALSE otherwise.
*/
static Bool
-event_query_is_touchpad(int fd, BOOL test_grab)
+event_query_is_touchpad(struct libevdev *evdev, BOOL test_grab)
{
int ret = FALSE, rc;
- unsigned long evbits[NBITS(EV_MAX)] = { 0 };
- unsigned long absbits[NBITS(ABS_MAX)] = { 0 };
- unsigned long keybits[NBITS(KEY_MAX)] = { 0 };
if (test_grab) {
- SYSCALL(rc = ioctl(fd, EVIOCGRAB, (pointer) 1));
+ rc = libevdev_grab(evdev, LIBEVDEV_GRAB);
if (rc < 0)
return FALSE;
}
/* Check for ABS_X, ABS_Y, ABS_PRESSURE and BTN_TOOL_FINGER */
-
- SYSCALL(rc = ioctl(fd, EVIOCGBIT(0, sizeof(evbits)), evbits));
- if (rc < 0)
- goto unwind;
- if (!TEST_BIT(EV_SYN, evbits) ||
- !TEST_BIT(EV_ABS, evbits) || !TEST_BIT(EV_KEY, evbits))
- goto unwind;
-
- SYSCALL(rc = ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(absbits)), absbits));
- if (rc < 0)
- goto unwind;
- if (!TEST_BIT(ABS_X, absbits) || !TEST_BIT(ABS_Y, absbits))
+ if (!libevdev_has_event_type(evdev, EV_SYN) ||
+ !libevdev_has_event_type(evdev, EV_ABS) ||
+ !libevdev_has_event_type(evdev, EV_KEY))
goto unwind;
- SYSCALL(rc = ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keybits)), keybits));
- if (rc < 0)
+ if (!libevdev_has_event_code(evdev, EV_ABS, ABS_X) ||
+ !libevdev_has_event_code(evdev, EV_ABS, ABS_Y))
goto unwind;
/* we expect touchpad either report raw pressure or touches */
- if (!TEST_BIT(ABS_PRESSURE, absbits) && !TEST_BIT(BTN_TOUCH, keybits))
+ if (!libevdev_has_event_code(evdev, EV_KEY, BTN_TOUCH) &&
+ !libevdev_has_event_code(evdev, EV_ABS, ABS_PRESSURE))
goto unwind;
+
/* all Synaptics-like touchpad report BTN_TOOL_FINGER */
- if (!TEST_BIT(BTN_TOOL_FINGER, keybits))
+ if (!libevdev_has_event_code(evdev, EV_KEY, BTN_TOOL_FINGER) ||
+ libevdev_has_event_code(evdev, EV_ABS, BTN_TOOL_PEN)) /* Don't match wacom tablets */
goto unwind;
- if (TEST_BIT(BTN_TOOL_PEN, keybits))
- goto unwind; /* Don't match wacom tablets */
ret = TRUE;
unwind:
if (test_grab)
- SYSCALL(ioctl(fd, EVIOCGRAB, (pointer) 0));
+ libevdev_grab(evdev, LIBEVDEV_UNGRAB);
return (ret == TRUE);
}
@@ -303,7 +337,9 @@ static struct model_lookup_t model_lookup_table[] = {
{0x0002, 0x0007, 0x0007, MODEL_SYNAPTICS},
{0x0002, 0x0008, 0x0008, MODEL_ALPS},
{0x05ac, PRODUCT_ANY, 0x222, MODEL_APPLETOUCH},
- {0x05ac, 0x223, PRODUCT_ANY, MODEL_UNIBODY_MACBOOK},
+ {0x05ac, 0x223, 0x228, MODEL_UNIBODY_MACBOOK},
+ {0x05ac, 0x229, 0x22b, MODEL_APPLETOUCH},
+ {0x05ac, 0x22c, PRODUCT_ANY, MODEL_UNIBODY_MACBOOK},
{0x0002, 0x000e, 0x000e, MODEL_ELANTECH},
{0x0, 0x0, 0x0, 0x0}
};
@@ -319,29 +355,27 @@ static struct model_lookup_t model_lookup_table[] = {
* @return TRUE on success or FALSE otherwise.
*/
static Bool
-event_query_model(int fd, enum TouchpadModel *model_out,
+event_query_model(struct libevdev *evdev, enum TouchpadModel *model_out,
unsigned short *vendor_id, unsigned short *product_id)
{
- struct input_id id;
- int rc;
+ int vendor, product;
struct model_lookup_t *model_lookup;
- SYSCALL(rc = ioctl(fd, EVIOCGID, &id));
- if (rc < 0)
- return FALSE;
+ vendor = libevdev_get_id_vendor(evdev);
+ product = libevdev_get_id_product(evdev);
for (model_lookup = model_lookup_table; model_lookup->vendor;
model_lookup++) {
- if (model_lookup->vendor == id.vendor &&
+ if (model_lookup->vendor == vendor &&
(model_lookup->product_start == PRODUCT_ANY ||
- model_lookup->product_start <= id.product) &&
+ model_lookup->product_start <= product) &&
(model_lookup->product_end == PRODUCT_ANY ||
- model_lookup->product_end >= id.product))
+ model_lookup->product_end >= product))
*model_out = model_lookup->model;
}
- *vendor_id = id.vendor;
- *product_id = id.product;
+ *vendor_id = vendor;
+ *product_id = product;
return TRUE;
}
@@ -361,27 +395,21 @@ event_query_model(int fd, enum TouchpadModel *model_out,
* @return Zero on success, or errno otherwise.
*/
static int
-event_get_abs(InputInfoPtr pInfo, int fd, int code,
+event_get_abs(struct libevdev *evdev, int code,
int *min, int *max, int *fuzz, int *res)
{
- int rc;
- struct input_absinfo abs = { 0 };
+ const struct input_absinfo *abs;
- SYSCALL(rc = ioctl(fd, EVIOCGABS(code), &abs));
- if (rc < 0) {
- xf86IDrvMsg(pInfo, X_ERROR, "%s EVIOCGABS error on %d (%s)\n",
- __func__, code, strerror(errno));
- return errno;
- }
+ abs = libevdev_get_abs_info(evdev, code);
+ *min = abs->minimum;
+ *max = abs->maximum;
- *min = abs.minimum;
- *max = abs.maximum;
/* We dont trust a zero fuzz as it probably is just a lazy value */
- if (fuzz && abs.fuzz > 0)
- *fuzz = abs.fuzz;
+ if (fuzz && abs->fuzz > 0)
+ *fuzz = abs->fuzz;
#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,30)
if (res)
- *res = abs.resolution;
+ *res = abs->resolution;
#endif
return 0;
@@ -393,36 +421,25 @@ event_query_axis_ranges(InputInfoPtr pInfo)
{
SynapticsPrivate *priv = (SynapticsPrivate *) pInfo->private;
struct eventcomm_proto_data *proto_data = priv->proto_data;
- unsigned long absbits[NBITS(ABS_MAX)] = { 0 };
- unsigned long keybits[NBITS(KEY_MAX)] = { 0 };
char buf[256] = { 0 };
- int rc;
/* The kernel's fuzziness concept seems a bit weird, but it can more or
* less be applied as hysteresis directly, i.e. no factor here. */
- event_get_abs(pInfo, pInfo->fd, ABS_X, &priv->minx, &priv->maxx,
+ event_get_abs(proto_data->evdev, ABS_X, &priv->minx, &priv->maxx,
&priv->synpara.hyst_x, &priv->resx);
- event_get_abs(pInfo, pInfo->fd, ABS_Y, &priv->miny, &priv->maxy,
+ event_get_abs(proto_data->evdev, ABS_Y, &priv->miny, &priv->maxy,
&priv->synpara.hyst_y, &priv->resy);
- priv->has_pressure = FALSE;
- priv->has_width = FALSE;
- SYSCALL(rc = ioctl(pInfo->fd, EVIOCGBIT(EV_ABS, sizeof(absbits)), absbits));
- if (rc >= 0) {
- priv->has_pressure = (TEST_BIT(ABS_PRESSURE, absbits) != 0);
- priv->has_width = (TEST_BIT(ABS_TOOL_WIDTH, absbits) != 0);
- }
- else
- xf86IDrvMsg(pInfo, X_ERROR, "failed to query ABS bits (%s)\n",
- strerror(errno));
+ priv->has_pressure = libevdev_has_event_code(proto_data->evdev, EV_ABS, ABS_PRESSURE);
+ priv->has_width = libevdev_has_event_code(proto_data->evdev, EV_ABS, ABS_TOOL_WIDTH);
if (priv->has_pressure)
- event_get_abs(pInfo, pInfo->fd, ABS_PRESSURE, &priv->minp, &priv->maxp,
+ event_get_abs(proto_data->evdev, ABS_PRESSURE, &priv->minp, &priv->maxp,
NULL, NULL);
if (priv->has_width)
- event_get_abs(pInfo, pInfo->fd, ABS_TOOL_WIDTH,
+ event_get_abs(proto_data->evdev, ABS_TOOL_WIDTH,
&priv->minw, &priv->maxw, NULL, NULL);
if (priv->has_touch) {
@@ -431,9 +448,9 @@ event_query_axis_ranges(InputInfoPtr pInfo)
int st_miny = priv->miny;
int st_maxy = priv->maxy;
- event_get_abs(pInfo, pInfo->fd, ABS_MT_POSITION_X, &priv->minx,
+ event_get_abs(proto_data->evdev, ABS_MT_POSITION_X, &priv->minx,
&priv->maxx, &priv->synpara.hyst_x, &priv->resx);
- event_get_abs(pInfo, pInfo->fd, ABS_MT_POSITION_Y, &priv->miny,
+ event_get_abs(proto_data->evdev, ABS_MT_POSITION_Y, &priv->miny,
&priv->maxy, &priv->synpara.hyst_y, &priv->resy);
proto_data->st_to_mt_offset[0] = priv->minx - st_minx;
@@ -444,19 +461,17 @@ event_query_axis_ranges(InputInfoPtr pInfo)
(priv->maxy - priv->miny) / (st_maxy - st_miny);
}
- SYSCALL(rc = ioctl(pInfo->fd, EVIOCGBIT(EV_KEY, sizeof(keybits)), keybits));
- if (rc >= 0) {
- priv->has_left = (TEST_BIT(BTN_LEFT, keybits) != 0);
- priv->has_right = (TEST_BIT(BTN_RIGHT, keybits) != 0);
- priv->has_middle = (TEST_BIT(BTN_MIDDLE, keybits) != 0);
- priv->has_double = (TEST_BIT(BTN_TOOL_DOUBLETAP, keybits) != 0);
- priv->has_triple = (TEST_BIT(BTN_TOOL_TRIPLETAP, keybits) != 0);
-
- if ((TEST_BIT(BTN_0, keybits) != 0) ||
- (TEST_BIT(BTN_1, keybits) != 0) ||
- (TEST_BIT(BTN_2, keybits) != 0) || (TEST_BIT(BTN_3, keybits) != 0))
- priv->has_scrollbuttons = 1;
- }
+ priv->has_left = libevdev_has_event_code(proto_data->evdev, EV_KEY, BTN_LEFT);
+ priv->has_right = libevdev_has_event_code(proto_data->evdev, EV_KEY, BTN_RIGHT);
+ priv->has_middle = libevdev_has_event_code(proto_data->evdev, EV_KEY, BTN_MIDDLE);
+ priv->has_double = libevdev_has_event_code(proto_data->evdev, EV_KEY, BTN_TOOL_DOUBLETAP);
+ priv->has_triple = libevdev_has_event_code(proto_data->evdev, EV_KEY, BTN_TOOL_TRIPLETAP);
+
+ if (libevdev_has_event_code(proto_data->evdev, EV_KEY, BTN_0) ||
+ libevdev_has_event_code(proto_data->evdev, EV_KEY, BTN_1) ||
+ libevdev_has_event_code(proto_data->evdev, EV_KEY, BTN_2) ||
+ libevdev_has_event_code(proto_data->evdev, EV_KEY, BTN_3))
+ priv->has_scrollbuttons = 1;
/* Now print the device information */
xf86IDrvMsg(pInfo, X_PROBED, "x-axis range %d - %d (res %d)\n",
@@ -497,8 +512,8 @@ EventQueryHardware(InputInfoPtr pInfo)
SynapticsPrivate *priv = (SynapticsPrivate *) pInfo->private;
struct eventcomm_proto_data *proto_data = priv->proto_data;
- if (!event_query_is_touchpad
- (pInfo->fd, (proto_data) ? proto_data->need_grab : TRUE))
+ if (!event_query_is_touchpad(proto_data->evdev,
+ (proto_data) ? proto_data->need_grab : TRUE))
return FALSE;
xf86IDrvMsg(pInfo, X_PROBED, "touchpad found\n");
@@ -511,27 +526,36 @@ SynapticsReadEvent(InputInfoPtr pInfo, struct input_event *ev)
{
SynapticsPrivate *priv = (SynapticsPrivate *) pInfo->private;
struct eventcomm_proto_data *proto_data = priv->proto_data;
- int rc = TRUE;
- ssize_t len;
+ int rc;
+ static struct timeval last_event_time;
- if (proto_data->mtdev)
- len = mtdev_get(proto_data->mtdev, pInfo->fd, ev, 1) *
- sizeof(struct input_event);
- else
- len = read(pInfo->fd, ev, sizeof(*ev));
- if (len <= 0) {
- /* We use X_NONE here because it doesn't alloc */
- if (errno != EAGAIN)
+ rc = libevdev_next_event(proto_data->evdev, proto_data->read_flag, ev);
+ if (rc < 0) {
+ if (rc != -EAGAIN) {
LogMessageVerbSigSafe(X_ERROR, 0, "%s: Read error %d\n", pInfo->name,
- errno);
- rc = FALSE;
- }
- else if (len % sizeof(*ev)) {
- LogMessageVerbSigSafe(X_ERROR, 0, "%s: Read error, invalid number of bytes.",
- pInfo->name);
- rc = FALSE;
+ errno);
+ } else if (proto_data->read_flag == LIBEVDEV_READ_FLAG_SYNC) {
+ proto_data->read_flag = LIBEVDEV_READ_FLAG_NORMAL;
+ return SynapticsReadEvent(pInfo, ev);
+ }
+
+ return FALSE;
}
- return rc;
+
+ /* SYN_DROPPED received in normal mode. Create a normal EV_SYN
+ so we process what's in the queue atm, then ensure we sync
+ next time */
+ if (rc == LIBEVDEV_READ_STATUS_SYNC &&
+ proto_data->read_flag == LIBEVDEV_READ_FLAG_NORMAL) {
+ proto_data->read_flag = LIBEVDEV_READ_FLAG_SYNC;
+ ev->type = EV_SYN;
+ ev->code = SYN_REPORT;
+ ev->value = 0;
+ ev->time = last_event_time;
+ } else if (ev->type == EV_SYN)
+ last_event_time = ev->time;
+
+ return TRUE;
}
static Bool
@@ -560,7 +584,7 @@ EventProcessTouchEvent(InputInfoPtr pInfo, struct SynapticsHwState *hw,
proto_data->cur_slot = ev->value;
}
else {
- int slot_index = last_mt_vals_slot(priv);
+ int slot_index = proto_data->cur_slot;
if (slot_index < 0)
return;
@@ -568,24 +592,7 @@ EventProcessTouchEvent(InputInfoPtr pInfo, struct SynapticsHwState *hw,
if (hw->slot_state[slot_index] == SLOTSTATE_OPEN_EMPTY)
hw->slot_state[slot_index] = SLOTSTATE_UPDATE;
if (ev->code == ABS_MT_TRACKING_ID) {
- int old_tracking_id = proto_data->tracking_ids[slot_index];
-
- /* We don't have proper SYN_DROPPED handling in
- synaptics < 1.8. This is a poor man's version that covers the
- worst bug we're seeing: touch points starting/stopping during
- SYN_DROPPED. There can only be one touchpoint per slot,
- identified by the tracking ID. Make sure that we only ever
- have a single touch point open per slot.
- */
- if (ev->value != -1 && old_tracking_id != -1) {
- /* Our touch terminated during SYN_DROPPED, now we have a
- new touch starting in the same slot but ours is still
- open. Do nothing, just continue with the old touch */
- } else if (ev->value == -1 && old_tracking_id == -1) {
- /* A new touch started during SYN_DROPPED, now we have that
- touch terminating. Do nothing, we don't have that touch
- open */
- } else if (ev->value >= 0) {
+ if (ev->value >= 0) {
hw->slot_state[slot_index] = SLOTSTATE_OPEN;
proto_data->num_touches++;
valuator_mask_copy(hw->mt_mask[slot_index],
@@ -595,8 +602,6 @@ EventProcessTouchEvent(InputInfoPtr pInfo, struct SynapticsHwState *hw,
hw->slot_state[slot_index] = SLOTSTATE_CLOSE;
proto_data->num_touches--;
}
-
- proto_data->tracking_ids[slot_index] = ev->value;
}
else {
ValuatorMask *mask = proto_data->last_mt_vals[slot_index];
@@ -661,13 +666,18 @@ EventReadHwState(InputInfoPtr pInfo,
SynapticsPrivate *priv = (SynapticsPrivate *) pInfo->private;
SynapticsParameters *para = &priv->synpara;
struct eventcomm_proto_data *proto_data = priv->proto_data;
+ Bool sync_cumulative = FALSE;
+
+ set_libevdev_log_handler();
SynapticsResetTouchHwState(hw, FALSE);
- /* Reset cumulative values if buttons were not previously pressed */
- if (!hw->left && !hw->right && !hw->middle) {
+ /* Reset cumulative values if buttons were not previously pressed,
+ * or no finger was previously present. */
+ if ((!hw->left && !hw->right && !hw->middle) || hw->z < para->finger_low) {
hw->cumulative_dx = hw->x;
hw->cumulative_dy = hw->y;
+ sync_cumulative = TRUE;
}
while (SynapticsReadEvent(pInfo, &ev)) {
@@ -743,9 +753,13 @@ EventReadHwState(InputInfoPtr pInfo,
switch (ev.code) {
case ABS_X:
hw->x = apply_st_scaling(proto_data, ev.value, 0);
+ if (sync_cumulative)
+ hw->cumulative_dx = hw->x;
break;
case ABS_Y:
hw->y = apply_st_scaling(proto_data, ev.value, 1);
+ if (sync_cumulative)
+ hw->cumulative_dy = hw->y;
break;
case ABS_PRESSURE:
hw->z = ev.value;
@@ -776,49 +790,46 @@ event_query_touch(InputInfoPtr pInfo)
SynapticsPrivate *priv = (SynapticsPrivate *) pInfo->private;
SynapticsParameters *para = &priv->synpara;
struct eventcomm_proto_data *proto_data = priv->proto_data;
- struct mtdev *mtdev;
- int i;
- int rc;
- uint8_t prop;
+ struct libevdev *dev = proto_data->evdev;
+ int axis;
priv->max_touches = 0;
priv->num_mt_axes = 0;
#ifdef EVIOCGPROP
- SYSCALL(rc = ioctl(pInfo->fd, EVIOCGPROP(sizeof(prop)), &prop));
- if (rc >= 0 && BitIsOn(&prop, INPUT_PROP_SEMI_MT)) {
+ if (libevdev_has_property(dev, INPUT_PROP_SEMI_MT)) {
xf86IDrvMsg(pInfo, X_INFO,
"ignoring touch events for semi-multitouch device\n");
priv->has_semi_mt = TRUE;
}
- if (rc >= 0 && BitIsOn(&prop, INPUT_PROP_BUTTONPAD)) {
+ if (libevdev_has_property(dev, INPUT_PROP_BUTTONPAD)) {
xf86IDrvMsg(pInfo, X_INFO, "found clickpad property\n");
para->clickpad = TRUE;
}
-#endif
- mtdev = mtdev_new_open(pInfo->fd);
- if (!mtdev) {
- xf86IDrvMsg(pInfo, X_WARNING,
- "failed to open mtdev when querying touch capabilities\n");
- return;
+ if (libevdev_has_property(dev, INPUT_PROP_TOPBUTTONPAD)) {
+ xf86IDrvMsg(pInfo, X_INFO, "found top buttonpad property\n");
+ para->has_secondary_buttons = TRUE;
}
+#endif
+
+
+ if (libevdev_has_event_code(dev, EV_ABS, ABS_MT_SLOT)) {
+ for (axis = ABS_MT_SLOT + 1; axis <= ABS_MT_MAX; axis++) {
+ if (!libevdev_has_event_code(dev, EV_ABS, axis))
+ continue;
- for (i = 0; i < MT_ABS_SIZE; i++) {
- if (mtdev->caps.has_abs[i]) {
- switch (i) {
- /* X and Y axis info is handed by synaptics already */
- case ABS_MT_POSITION_X - ABS_MT_TOUCH_MAJOR:
- case ABS_MT_POSITION_Y - ABS_MT_TOUCH_MAJOR:
- /* Skip tracking ID info */
- case ABS_MT_TRACKING_ID - ABS_MT_TOUCH_MAJOR:
- break;
- default:
- priv->num_mt_axes++;
- break;
- }
priv->has_touch = TRUE;
+
+ /* X and Y axis info is handled by synaptics already and we don't
+ expose the tracking ID */
+ if (axis == ABS_MT_POSITION_X ||
+ axis == ABS_MT_POSITION_Y ||
+ axis == ABS_MT_TRACKING_ID)
+ continue;
+
+ priv->num_mt_axes++;
}
}
@@ -839,52 +850,49 @@ event_query_touch(InputInfoPtr pInfo)
AXIS_LABEL_PROP_ABS_MT_PRESSURE,
};
- if (mtdev->caps.slot.maximum > 0)
- priv->max_touches = mtdev->caps.slot.maximum + 1;
-
+ priv->max_touches = libevdev_get_num_slots(dev);
priv->touch_axes = malloc(priv->num_mt_axes *
sizeof(SynapticsTouchAxisRec));
if (!priv->touch_axes) {
priv->has_touch = FALSE;
- goto out;
+ return;
}
axnum = 0;
- for (i = 0; i < MT_ABS_SIZE; i++) {
- if (mtdev->caps.has_abs[i]) {
- switch (i) {
- /* X and Y axis info is handed by synaptics already, we just
- * need to map the evdev codes to the valuator numbers */
- case ABS_MT_POSITION_X - ABS_MT_TOUCH_MAJOR:
- proto_data->axis_map[i] = 0;
+ for (axis = ABS_MT_SLOT + 1; axis <= ABS_MT_MAX; axis++) {
+ int axis_idx = axis - ABS_MT_TOUCH_MAJOR;
+
+ if (!libevdev_has_event_code(dev, EV_ABS, axis))
+ continue;
+
+ switch (axis) {
+ /* X and Y axis info is handled by synaptics already, we just
+ * need to map the evdev codes to the valuator numbers */
+ case ABS_MT_POSITION_X:
+ proto_data->axis_map[axis_idx] = 0;
break;
- case ABS_MT_POSITION_Y - ABS_MT_TOUCH_MAJOR:
- proto_data->axis_map[i] = 1;
+ case ABS_MT_POSITION_Y:
+ proto_data->axis_map[axis_idx] = 1;
break;
/* Skip tracking ID info */
- case ABS_MT_TRACKING_ID - ABS_MT_TOUCH_MAJOR:
+ case ABS_MT_TRACKING_ID:
break;
default:
- priv->touch_axes[axnum].label = labels[i];
- priv->touch_axes[axnum].min = mtdev->caps.abs[i].minimum;
- priv->touch_axes[axnum].max = mtdev->caps.abs[i].maximum;
+ priv->touch_axes[axnum].label = labels[axis_idx];
+ priv->touch_axes[axnum].min = libevdev_get_abs_minimum(dev, axis);
+ priv->touch_axes[axnum].max = libevdev_get_abs_maximum(dev, axis);
/* Kernel provides units/mm, X wants units/m */
- priv->touch_axes[axnum].res =
- mtdev->caps.abs[i].resolution * 1000;
+ priv->touch_axes[axnum].res = libevdev_get_abs_resolution(dev, axis) * 1000;
/* Valuators 0-3 are used for X, Y, and scrolling */
- proto_data->axis_map[i] = 4 + axnum;
+ proto_data->axis_map[axis_idx] = 4 + axnum;
axnum++;
break;
- }
}
}
}
-
- out:
- mtdev_close_delete(mtdev);
}
/**
@@ -897,18 +905,18 @@ EventReadDevDimensions(InputInfoPtr pInfo)
struct eventcomm_proto_data *proto_data = priv->proto_data;
int i;
- proto_data = EventProtoDataAlloc();
+ proto_data = EventProtoDataAlloc(pInfo->fd);
priv->proto_data = proto_data;
- for (i = 0; i < MT_ABS_SIZE; i++)
+ for (i = 0; i < ABS_MT_CNT; i++)
proto_data->axis_map[i] = -1;
proto_data->cur_slot = -1;
- if (event_query_is_touchpad(pInfo->fd, proto_data->need_grab)) {
+ if (event_query_is_touchpad(proto_data->evdev, proto_data->need_grab)) {
event_query_touch(pInfo);
event_query_axis_ranges(pInfo);
}
- event_query_model(pInfo->fd, &priv->model, &priv->id_vendor,
+ event_query_model(proto_data->evdev, &priv->model, &priv->id_vendor,
&priv->id_product);
xf86IDrvMsg(pInfo, X_PROBED, "Vendor %#hx Product %#hx\n",
@@ -927,11 +935,24 @@ EventAutoDevProbe(InputInfoPtr pInfo, const char *device)
if (device) {
int fd = -1;
- SYSCALL(fd = open(device, O_RDONLY));
+ if (pInfo->flags & XI86_SERVER_FD)
+ fd = pInfo->fd;
+ else
+ SYSCALL(fd = open(device, O_RDONLY));
+
if (fd >= 0) {
- touchpad_found = event_query_is_touchpad(fd, TRUE);
+ int rc;
+ struct libevdev *evdev;
+
+ rc = libevdev_new_from_fd(fd, &evdev);
+ if (rc >= 0) {
+ touchpad_found = event_query_is_touchpad(evdev, TRUE);
+ libevdev_free(evdev);
+ }
+
+ if (!(pInfo->flags & XI86_SERVER_FD))
+ SYSCALL(close(fd));
- SYSCALL(close(fd));
/* if a device is set and not a touchpad (or already grabbed),
* we must return FALSE. Otherwise, we'll add a device that
* wasn't requested for and repeat
@@ -957,17 +978,25 @@ EventAutoDevProbe(InputInfoPtr pInfo, const char *device)
int fd = -1;
if (!touchpad_found) {
+ int rc;
+ struct libevdev *evdev;
+
sprintf(fname, "%s/%s", DEV_INPUT_EVENT, namelist[i]->d_name);
SYSCALL(fd = open(fname, O_RDONLY));
if (fd < 0)
continue;
- if (event_query_is_touchpad(fd, TRUE)) {
- touchpad_found = TRUE;
- xf86IDrvMsg(pInfo, X_PROBED, "auto-dev sets device to %s\n",
- fname);
- pInfo->options =
- xf86ReplaceStrOption(pInfo->options, "Device", fname);
+ rc = libevdev_new_from_fd(fd, &evdev);
+ if (rc >= 0) {
+ touchpad_found = event_query_is_touchpad(evdev, TRUE);
+ libevdev_free(evdev);
+ if (touchpad_found) {
+ xf86IDrvMsg(pInfo, X_PROBED, "auto-dev sets device to %s\n",
+ fname);
+ pInfo->options = xf86ReplaceStrOption(pInfo->options,
+ "Device",
+ fname);
+ }
}
SYSCALL(close(fd));
}
diff --git a/driver/xf86-input-synaptics/src/eventcomm.h b/driver/xf86-input-synaptics/src/eventcomm.h
index ef89108f6..4d759ffb7 100644
--- a/driver/xf86-input-synaptics/src/eventcomm.h
+++ b/driver/xf86-input-synaptics/src/eventcomm.h
@@ -38,7 +38,7 @@
struct eventcomm_proto_data;
-extern struct eventcomm_proto_data *EventProtoDataAlloc(void);
+extern struct eventcomm_proto_data *EventProtoDataAlloc(int fd);
extern Bool
EventReadHwState(InputInfoPtr pInfo,
diff --git a/driver/xf86-input-synaptics/src/properties.c b/driver/xf86-input-synaptics/src/properties.c
index 886d8c264..718d0543e 100644
--- a/driver/xf86-input-synaptics/src/properties.c
+++ b/driver/xf86-input-synaptics/src/properties.c
@@ -91,6 +91,7 @@ Atom prop_capabilities = 0;
Atom prop_resolution = 0;
Atom prop_area = 0;
Atom prop_softbutton_areas = 0;
+Atom prop_secondary_softbutton_areas = 0;
Atom prop_noise_cancellation = 0;
Atom prop_product_id = 0;
Atom prop_device_node = 0;
@@ -164,16 +165,33 @@ InitSoftButtonProperty(InputInfoPtr pInfo)
SynapticsParameters *para = &priv->synpara;
int values[8];
- values[0] = para->softbutton_areas[0][0];
- values[1] = para->softbutton_areas[0][1];
- values[2] = para->softbutton_areas[0][2];
- values[3] = para->softbutton_areas[0][3];
- values[4] = para->softbutton_areas[1][0];
- values[5] = para->softbutton_areas[1][1];
- values[6] = para->softbutton_areas[1][2];
- values[7] = para->softbutton_areas[1][3];
+ values[0] = para->softbutton_areas[BOTTOM_RIGHT_BUTTON_AREA][LEFT];
+ values[1] = para->softbutton_areas[BOTTOM_RIGHT_BUTTON_AREA][RIGHT];
+ values[2] = para->softbutton_areas[BOTTOM_RIGHT_BUTTON_AREA][TOP];
+ values[3] = para->softbutton_areas[BOTTOM_RIGHT_BUTTON_AREA][BOTTOM];
+ values[4] = para->softbutton_areas[BOTTOM_MIDDLE_BUTTON_AREA][LEFT];
+ values[5] = para->softbutton_areas[BOTTOM_MIDDLE_BUTTON_AREA][RIGHT];
+ values[6] = para->softbutton_areas[BOTTOM_MIDDLE_BUTTON_AREA][TOP];
+ values[7] = para->softbutton_areas[BOTTOM_MIDDLE_BUTTON_AREA][BOTTOM];
prop_softbutton_areas =
InitAtom(pInfo->dev, SYNAPTICS_PROP_SOFTBUTTON_AREAS, 32, 8, values);
+
+ if (!para->has_secondary_buttons)
+ return;
+
+ values[0] = para->softbutton_areas[TOP_RIGHT_BUTTON_AREA][LEFT];
+ values[1] = para->softbutton_areas[TOP_RIGHT_BUTTON_AREA][RIGHT];
+ values[2] = para->softbutton_areas[TOP_RIGHT_BUTTON_AREA][TOP];
+ values[3] = para->softbutton_areas[TOP_RIGHT_BUTTON_AREA][BOTTOM];
+ values[4] = para->softbutton_areas[TOP_MIDDLE_BUTTON_AREA][LEFT];
+ values[5] = para->softbutton_areas[TOP_MIDDLE_BUTTON_AREA][RIGHT];
+ values[6] = para->softbutton_areas[TOP_MIDDLE_BUTTON_AREA][TOP];
+ values[7] = para->softbutton_areas[TOP_MIDDLE_BUTTON_AREA][BOTTOM];
+
+ if (values[0] || values[1] || values[2] || values[4] ||
+ values[5] || values[6] || values[7])
+ prop_secondary_softbutton_areas =
+ InitAtom(pInfo->dev, SYNAPTICS_PROP_SECONDARY_SOFTBUTTON_AREAS, 32, 8, values);
}
void
@@ -768,8 +786,21 @@ SetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop,
if (!SynapticsIsSoftButtonAreasValid(areas))
return BadValue;
- memcpy(para->softbutton_areas[0], areas, 4 * sizeof(int));
- memcpy(para->softbutton_areas[1], areas + 4, 4 * sizeof(int));
+ memcpy(para->softbutton_areas[BOTTOM_RIGHT_BUTTON_AREA], areas, 4 * sizeof(int));
+ memcpy(para->softbutton_areas[BOTTOM_MIDDLE_BUTTON_AREA], areas + 4, 4 * sizeof(int));
+ }
+ else if (property == prop_secondary_softbutton_areas) {
+ int *areas;
+
+ if (prop->size != 8 || prop->format != 32 || prop->type != XA_INTEGER)
+ return BadMatch;
+
+ areas = (int *) prop->data;
+ if (!SynapticsIsSoftButtonAreasValid(areas))
+ return BadValue;
+
+ memcpy(para->softbutton_areas[TOP_RIGHT_BUTTON_AREA], areas, 4 * sizeof(int));
+ memcpy(para->softbutton_areas[TOP_MIDDLE_BUTTON_AREA], areas + 4, 4 * sizeof(int));
}
else if (property == prop_noise_cancellation) {
INT32 *hyst;
diff --git a/driver/xf86-input-synaptics/src/synaptics.c b/driver/xf86-input-synaptics/src/synaptics.c
index 98bf434a1..d711ff836 100644
--- a/driver/xf86-input-synaptics/src/synaptics.c
+++ b/driver/xf86-input-synaptics/src/synaptics.c
@@ -171,6 +171,10 @@ InputDriverRec SYNAPTICS = {
SynapticsPreInit,
SynapticsUnInit,
NULL,
+ NULL,
+#ifdef XI86_DRV_CAP_SERVER_FD
+ XI86_DRV_CAP_SERVER_FD
+#endif
};
static XF86ModuleVersionInfo VersionRec = {
@@ -202,6 +206,15 @@ _X_EXPORT XF86ModuleData synapticsModuleData = {
/*****************************************************************************
* Function Definitions
****************************************************************************/
+static inline void
+SynapticsCloseFd(InputInfoPtr pInfo)
+{
+ if (pInfo->fd > -1 && !(pInfo->flags & XI86_SERVER_FD)) {
+ xf86CloseSerial(pInfo->fd);
+ pInfo->fd = -1;
+ }
+}
+
/**
* Fill in default dimensions for backends that cannot query the hardware.
* Eventually, we want the edges to be 1900/5400 for x, 1900/4000 for y.
@@ -455,7 +468,7 @@ SynapticsIsSoftButtonAreasValid(int *values)
}
static void
-set_softbutton_areas_option(InputInfoPtr pInfo)
+set_softbutton_areas_option(InputInfoPtr pInfo, char *option_name, int offset)
{
SynapticsPrivate *priv = pInfo->private;
SynapticsParameters *pars = &priv->synpara;
@@ -470,7 +483,7 @@ set_softbutton_areas_option(InputInfoPtr pInfo)
if (!pars->clickpad)
return;
- option_string = xf86SetStrOption(pInfo->options, "SoftButtonAreas", NULL);
+ option_string = xf86SetStrOption(pInfo->options, option_name, NULL);
if (!option_string)
return;
@@ -515,8 +528,8 @@ set_softbutton_areas_option(InputInfoPtr pInfo)
if (!SynapticsIsSoftButtonAreasValid(values))
goto fail;
- memcpy(pars->softbutton_areas[0], values, 4 * sizeof(int));
- memcpy(pars->softbutton_areas[1], values + 4, 4 * sizeof(int));
+ memcpy(pars->softbutton_areas[offset], values, 4 * sizeof(int));
+ memcpy(pars->softbutton_areas[offset + 1], values + 4, 4 * sizeof(int));
free(option_string);
@@ -524,12 +537,24 @@ set_softbutton_areas_option(InputInfoPtr pInfo)
fail:
xf86IDrvMsg(pInfo, X_ERROR,
- "invalid SoftButtonAreas value '%s', keeping defaults\n",
- option_string);
+ "invalid %s value '%s', keeping defaults\n",
+ option_name, option_string);
free(option_string);
}
static void
+set_primary_softbutton_areas_option(InputInfoPtr pInfo)
+{
+ set_softbutton_areas_option(pInfo, "SoftButtonAreas", BOTTOM_BUTTON_AREA);
+}
+
+static void
+set_secondary_softbutton_areas_option(InputInfoPtr pInfo)
+{
+ set_softbutton_areas_option(pInfo, "SecondarySoftButtonAreas", TOP_BUTTON_AREA);
+}
+
+static void
set_default_parameters(InputInfoPtr pInfo)
{
SynapticsPrivate *priv = pInfo->private; /* read-only */
@@ -554,6 +579,8 @@ set_default_parameters(InputInfoPtr pInfo)
int width, height, diag, range;
int horizHyst, vertHyst;
int middle_button_timeout;
+ int grab_event_device = 0;
+ const char *source;
/* The synaptics specs specify typical edge widths of 4% on x, and 5.4% on
* y (page 7) [Synaptics TouchPad Interfacing Guide, 510-000080 - A
@@ -650,6 +677,11 @@ set_default_parameters(InputInfoPtr pInfo)
pars->tap_time_2 = xf86SetIntOption(opts, "MaxDoubleTapTime", 180);
pars->click_time = xf86SetIntOption(opts, "ClickTime", 100);
pars->clickpad = xf86SetBoolOption(opts, "ClickPad", pars->clickpad); /* Probed */
+ if (pars->clickpad)
+ pars->has_secondary_buttons = xf86SetBoolOption(opts,
+ "HasSecondarySoftButtons",
+ pars->has_secondary_buttons);
+ pars->clickpad_ignore_motion_time = 100; /* ms */
/* middle mouse button emulation on a clickpad? nah, you're joking */
middle_button_timeout = pars->clickpad ? 0 : 75;
pars->emulate_mid_button_time =
@@ -724,7 +756,16 @@ set_default_parameters(InputInfoPtr pInfo)
xf86SetRealOption(opts, "PressureMotionMinFactor", 1.0);
pars->press_motion_max_factor =
xf86SetRealOption(opts, "PressureMotionMaxFactor", 1.0);
- pars->grab_event_device = xf86SetBoolOption(opts, "GrabEventDevice", TRUE);
+
+ /* Only grab the device by default if it's not coming from a config
+ backend. This way we avoid the device being added twice and sending
+ duplicate events.
+ */
+ source = xf86CheckStrOption(opts, "_source", NULL);
+ if (source == NULL || strncmp(source, "server/", 7) != 0)
+ grab_event_device = TRUE;
+ pars->grab_event_device = xf86SetBoolOption(opts, "GrabEventDevice", grab_event_device);
+
pars->tap_and_drag_gesture =
xf86SetBoolOption(opts, "TapAndDragGesture", TRUE);
pars->resolution_horiz =
@@ -742,7 +783,9 @@ set_default_parameters(InputInfoPtr pInfo)
"TopEdge is bigger than BottomEdge. Fixing.\n");
}
- set_softbutton_areas_option(pInfo);
+ set_primary_softbutton_areas_option(pInfo);
+ if (pars->has_secondary_buttons)
+ set_secondary_softbutton_areas_option(pInfo);
}
static double
@@ -866,22 +909,16 @@ SynapticsPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
xf86ProcessCommonOptions(pInfo, pInfo->options);
- if (pInfo->fd != -1) {
- if (priv->comm.buffer) {
- XisbFree(priv->comm.buffer);
- priv->comm.buffer = NULL;
- }
- xf86CloseSerial(pInfo->fd);
+ if (priv->comm.buffer) {
+ XisbFree(priv->comm.buffer);
+ priv->comm.buffer = NULL;
}
- pInfo->fd = -1;
+ SynapticsCloseFd(pInfo);
return Success;
SetupProc_fail:
- if (pInfo->fd >= 0) {
- xf86CloseSerial(pInfo->fd);
- pInfo->fd = -1;
- }
+ SynapticsCloseFd(pInfo);
if (priv->comm.buffer)
XisbFree(priv->comm.buffer);
@@ -962,33 +999,31 @@ DeviceOn(DeviceIntPtr dev)
}
if (priv->proto_ops->DeviceOnHook &&
- !priv->proto_ops->DeviceOnHook(pInfo, &priv->synpara)) {
- xf86CloseSerial(pInfo->fd);
- return !Success;
- }
+ !priv->proto_ops->DeviceOnHook(pInfo, &priv->synpara))
+ goto error;
priv->comm.buffer = XisbNew(pInfo->fd, INPUT_BUFFER_SIZE);
- if (!priv->comm.buffer) {
- xf86CloseSerial(pInfo->fd);
- pInfo->fd = -1;
- return !Success;
- }
+ if (!priv->comm.buffer)
+ goto error;
xf86FlushInput(pInfo->fd);
/* reinit the pad */
- if (!QueryHardware(pInfo)) {
- XisbFree(priv->comm.buffer);
- priv->comm.buffer = NULL;
- xf86CloseSerial(pInfo->fd);
- pInfo->fd = -1;
- return !Success;
- }
+ if (!QueryHardware(pInfo))
+ goto error;
xf86AddEnabledDevice(pInfo);
dev->public.on = TRUE;
return Success;
+
+error:
+ if (priv->comm.buffer) {
+ XisbFree(priv->comm.buffer);
+ priv->comm.buffer = NULL;
+ }
+ SynapticsCloseFd(pInfo);
+ return !Success;
}
static void
@@ -996,7 +1031,6 @@ SynapticsReset(SynapticsPrivate * priv)
{
SynapticsResetHwState(priv->hwState);
SynapticsResetHwState(priv->local_hw_state);
- SynapticsResetHwState(priv->old_hw_state);
SynapticsResetHwState(priv->comm.hwState);
memset(priv->move_hist, 0, sizeof(priv->move_hist));
@@ -1006,6 +1040,8 @@ SynapticsReset(SynapticsPrivate * priv)
priv->count_packet_finger = 0;
priv->finger_state = FS_UNTOUCHED;
priv->last_motion_millis = 0;
+ priv->clickpad_click_millis = 0;
+ priv->last_button_area = NO_BUTTON_AREA;
priv->tap_state = TS_START;
priv->tap_button = 0;
priv->tap_button_state = TBS_BUTTON_UP;
@@ -1046,8 +1082,7 @@ DeviceOff(DeviceIntPtr dev)
XisbFree(priv->comm.buffer);
priv->comm.buffer = NULL;
}
- xf86CloseSerial(pInfo->fd);
- pInfo->fd = -1;
+ SynapticsCloseFd(pInfo);
}
dev->public.on = FALSE;
return rc;
@@ -1066,7 +1101,6 @@ DeviceClose(DeviceIntPtr dev)
free(priv->touch_axes);
priv->touch_axes = NULL;
SynapticsHwStateFree(&priv->hwState);
- SynapticsHwStateFree(&priv->old_hw_state);
SynapticsHwStateFree(&priv->local_hw_state);
SynapticsHwStateFree(&priv->comm.hwState);
return RetValue;
@@ -1312,10 +1346,6 @@ DeviceInit(DeviceIntPtr dev)
if (!priv->hwState)
goto fail;
- priv->old_hw_state = SynapticsHwStateAlloc(priv);
- if (!priv->old_hw_state)
- goto fail;
-
priv->local_hw_state = SynapticsHwStateAlloc(priv);
if (!priv->local_hw_state)
goto fail;
@@ -1439,6 +1469,11 @@ is_inside_active_area(SynapticsPrivate * priv, int x, int y)
{
Bool inside_area = TRUE;
+ /* If a finger is down, then it must have started inside the active_area,
+ allow the motion to complete using the entire area */
+ if (priv->finger_state >= FS_TOUCHED)
+ return TRUE;
+
if ((priv->synpara.area_left_edge != 0) &&
(x < priv->synpara.area_left_edge))
inside_area = FALSE;
@@ -1460,13 +1495,6 @@ is_inside_button_area(SynapticsParameters * para, int which, int x, int y)
{
Bool inside_area = TRUE;
- enum {
- LEFT = 0,
- RIGHT = 1,
- TOP = 2,
- BOTTOM = 3
- };
-
if (para->softbutton_areas[which][LEFT] == 0 &&
para->softbutton_areas[which][RIGHT] == 0 &&
para->softbutton_areas[which][TOP] == 0 &&
@@ -1492,13 +1520,78 @@ is_inside_button_area(SynapticsParameters * para, int which, int x, int y)
static Bool
is_inside_rightbutton_area(SynapticsParameters * para, int x, int y)
{
- return is_inside_button_area(para, 0, x, y);
+ return is_inside_button_area(para, BOTTOM_RIGHT_BUTTON_AREA, x, y);
}
static Bool
is_inside_middlebutton_area(SynapticsParameters * para, int x, int y)
{
- return is_inside_button_area(para, 1, x, y);
+ return is_inside_button_area(para, BOTTOM_MIDDLE_BUTTON_AREA, x, y);
+}
+
+static Bool
+is_inside_sec_rightbutton_area(SynapticsParameters * para, int x, int y)
+{
+ return is_inside_button_area(para, TOP_RIGHT_BUTTON_AREA, x, y);
+}
+
+static Bool
+is_inside_sec_middlebutton_area(SynapticsParameters * para, int x, int y)
+{
+ return is_inside_button_area(para, TOP_MIDDLE_BUTTON_AREA, x, y);
+}
+
+static Bool
+is_inside_top_or_bottom_button_area(SynapticsParameters * para, int offset,
+ int x, int y)
+{
+ Bool inside_area = TRUE;
+ Bool right_valid, middle_valid;
+ int top, bottom;
+
+ /* We don't have a left button area, so we only check the y axis */
+ right_valid = para->softbutton_areas[offset][TOP] ||
+ para->softbutton_areas[offset][BOTTOM];
+ middle_valid = para->softbutton_areas[offset + 1][TOP] ||
+ para->softbutton_areas[offset + 1][BOTTOM];
+
+ if (!right_valid && !middle_valid)
+ return FALSE;
+
+ /* Check both buttons are horizontally aligned */
+ if (right_valid && middle_valid && (
+ para->softbutton_areas[offset][TOP] !=
+ para->softbutton_areas[offset + 1][TOP] ||
+ para->softbutton_areas[offset][BOTTOM] !=
+ para->softbutton_areas[offset + 1][BOTTOM]))
+ return FALSE;
+
+ if (right_valid) {
+ top = para->softbutton_areas[offset][TOP];
+ bottom = para->softbutton_areas[offset][BOTTOM];
+ }
+ else {
+ top = para->softbutton_areas[offset + 1][TOP];
+ bottom = para->softbutton_areas[offset + 1][BOTTOM];
+ }
+
+ if (top && y < top)
+ inside_area = FALSE;
+ else if (bottom && y > bottom)
+ inside_area = FALSE;
+
+ return inside_area;
+}
+
+static enum SoftButtonAreas
+current_button_area(SynapticsParameters * para, int x, int y)
+{
+ if (is_inside_top_or_bottom_button_area(para, BOTTOM_BUTTON_AREA, x, y))
+ return BOTTOM_BUTTON_AREA;
+ else if (is_inside_top_or_bottom_button_area(para, TOP_BUTTON_AREA, x, y))
+ return TOP_BUTTON_AREA;
+ else
+ return NO_BUTTON_AREA;
}
static CARD32
@@ -1860,7 +1953,8 @@ HandleTapProcessing(SynapticsPrivate * priv, struct SynapticsHwState *hw,
enum EdgeType edge;
int delay = 1000000000;
- if (priv->finger_state == FS_BLOCKED)
+ if (para->touchpad_off == TOUCHPAD_OFF ||
+ priv->finger_state == FS_BLOCKED)
return delay;
touch = finger >= FS_TOUCHED && priv->finger_state == FS_UNTOUCHED;
@@ -2097,11 +2191,8 @@ static void
get_delta(SynapticsPrivate *priv, const struct SynapticsHwState *hw,
enum EdgeType edge, double *dx, double *dy)
{
- double dtime = (hw->millis - HIST(0).millis) / 1000.0;
double integral;
double tmpf;
- int x_edge_speed = 0;
- int y_edge_speed = 0;
*dx = hw->x - HIST(0).x;
*dy = hw->y - HIST(0).y;
@@ -2116,10 +2207,10 @@ get_delta(SynapticsPrivate *priv, const struct SynapticsHwState *hw,
if (isnan(priv->frac_y))
priv->frac_y = 0;
- tmpf = *dx + x_edge_speed * dtime + priv->frac_x;
+ tmpf = *dx + priv->frac_x;
priv->frac_x = modf(tmpf, &integral);
*dx = integral;
- tmpf = *dy + y_edge_speed * dtime + priv->frac_y;
+ tmpf = *dy + priv->frac_y;
priv->frac_y = modf(tmpf, &integral);
*dy = integral;
}
@@ -2278,7 +2369,9 @@ HandleScrolling(SynapticsPrivate * priv, struct SynapticsHwState *hw,
SynapticsParameters *para = &priv->synpara;
int delay = 1000000000;
- if ((priv->synpara.touchpad_off == TOUCHPAD_TAP_OFF) || (priv->finger_state == FS_BLOCKED)) {
+ if (priv->synpara.touchpad_off == TOUCHPAD_TAP_OFF ||
+ priv->synpara.touchpad_off == TOUCHPAD_OFF ||
+ priv->finger_state == FS_BLOCKED) {
stop_coasting(priv);
priv->circ_scroll_on = FALSE;
priv->vert_scroll_edge_on = FALSE;
@@ -2587,6 +2680,13 @@ clickpad_guess_clickfingers(SynapticsPrivate * priv,
close_point >>= 1;
}
+ /* Some trackpads touchpad only track two touchpoints but announce
+ * BTN_TOOL_TRIPLETAP (which sets hw->numFingers to 3), when this happens
+ * the user likely intents to do a 3 finger click, so handle it as such.
+ */
+ if (hw->numFingers >= 3 && hw->num_mt_mask < 3)
+ nfingers = 3;
+
return nfingers;
}
@@ -2674,7 +2774,7 @@ adjust_state_from_scrollbuttons(const InputInfoPtr pInfo,
static void
update_hw_button_state(const InputInfoPtr pInfo, struct SynapticsHwState *hw,
- struct SynapticsHwState *old, CARD32 now, int *delay)
+ CARD32 now, int *delay)
{
SynapticsPrivate *priv = (SynapticsPrivate *) (pInfo->private);
SynapticsParameters *para = &priv->synpara;
@@ -2690,32 +2790,45 @@ update_hw_button_state(const InputInfoPtr pInfo, struct SynapticsHwState *hw,
* the soft button instead. */
if (para->clickpad) {
/* hw->left is down, but no other buttons were already down */
- if (!old->left && !old->right && !old->middle &&
- hw->left && !hw->right && !hw->middle) {
- if (is_inside_rightbutton_area(para, hw->x, hw->y)) {
- hw->left = 0;
- hw->right = 1;
- }
- else if (is_inside_middlebutton_area(para, hw->x, hw->y)) {
- hw->left = 0;
- hw->middle = 1;
- }
+ if (!(priv->lastButtons & 7) && hw->left && !hw->right && !hw->middle) {
+ /* If the finger down event is delayed, the x and y
+ * coordinates are stale so we delay processing the click */
+ if (hw->z < para->finger_low) {
+ hw->left = 0;
+ goto out;
+ }
+ if (is_inside_rightbutton_area(para, hw->x, hw->y)) {
+ hw->left = 0;
+ hw->right = 1;
+ }
+ else if (is_inside_sec_rightbutton_area(para, hw->x, hw->y)) {
+ hw->left = 0;
+ hw->right = 1;
+ }
+ else if (is_inside_middlebutton_area(para, hw->x, hw->y)) {
+ hw->left = 0;
+ hw->middle = 1;
+ }
+ else if (is_inside_sec_middlebutton_area(para, hw->x, hw->y)) {
+ hw->left = 0;
+ hw->middle = 1;
+ }
+ priv->clickpad_click_millis = now;
}
else if (hw->left) {
- hw->left = old->left;
- hw->right = old->right;
- hw->middle = old->middle;
+ hw->left = (priv->lastButtons & 1) ? 1 : 0;
+ hw->middle = (priv->lastButtons & 2) ? 1 : 0;
+ hw->right = (priv->lastButtons & 4) ? 1 : 0;
}
}
/* Fingers emulate other buttons. ClickFinger can only be
triggered on transition, when left is pressed
*/
- if (hw->left && !old->left && !old->middle && !old->right &&
- hw->numFingers >= 1) {
+ if (hw->left && !(priv->lastButtons & 7) && hw->numFingers >= 1)
handle_clickfinger(priv, hw);
- }
+out:
/* Two finger emulation */
if (hw->numFingers == 1 && hw->z >= para->emulate_twofinger_z &&
hw->fingerWidth >= para->emulate_twofinger_w) {
@@ -2971,12 +3084,8 @@ HandleState(InputInfoPtr pInfo, struct SynapticsHwState *hw, CARD32 now,
int delay = 1000000000;
int timeleft;
Bool inside_active_area;
-
- /* If touchpad is switched off, we skip the whole thing and return delay */
- if (para->touchpad_off == TOUCHPAD_OFF) {
- UpdateTouchState(pInfo, hw);
- return delay;
- }
+ Bool using_cumulative_coords = FALSE;
+ Bool ignore_motion;
/* We need both and x/y, the driver can't handle just one of the two
* yet. But since it's possible to hit a phys button on non-clickpads
@@ -2993,9 +3102,11 @@ HandleState(InputInfoPtr pInfo, struct SynapticsHwState *hw, CARD32 now,
/* If a physical button is pressed on a clickpad, use cumulative relative
* touch movements for motion */
- if (para->clickpad && (hw->left || hw->right || hw->middle)) {
+ if (para->clickpad && (priv->lastButtons & 7) &&
+ priv->last_button_area != TOP_BUTTON_AREA) {
hw->x = hw->cumulative_dx;
hw->y = hw->cumulative_dy;
+ using_cumulative_coords = TRUE;
}
/* apply hysteresis before doing anything serious. This cancels
@@ -3005,22 +3116,39 @@ HandleState(InputInfoPtr pInfo, struct SynapticsHwState *hw, CARD32 now,
inside_active_area = is_inside_active_area(priv, hw->x, hw->y);
+ /* Ignore motion *starting* inside softbuttonareas */
+ if (priv->finger_state < FS_TOUCHED)
+ priv->last_button_area = current_button_area(para, hw->x, hw->y);
+ /* If we already have a finger down, clear last_button_area if it goes
+ outside of the softbuttonareas */
+ else if (priv->last_button_area != NO_BUTTON_AREA &&
+ current_button_area(para, hw->x, hw->y) == NO_BUTTON_AREA)
+ priv->last_button_area = NO_BUTTON_AREA;
+
+ ignore_motion = para->touchpad_off == TOUCHPAD_OFF ||
+ (!using_cumulative_coords && priv->last_button_area != NO_BUTTON_AREA);
+
/* these two just update hw->left, right, etc. */
- update_hw_button_state(pInfo, hw, priv->old_hw_state, now, &delay);
+ update_hw_button_state(pInfo, hw, now, &delay);
if (priv->has_scrollbuttons)
double_click = adjust_state_from_scrollbuttons(pInfo, hw);
+ /* Ignore motion the first X ms after a clickpad click */
+ if (priv->clickpad_click_millis) {
+ if(TIME_DIFF(priv->clickpad_click_millis +
+ para->clickpad_ignore_motion_time, now) > 0)
+ ignore_motion = TRUE;
+ else
+ priv->clickpad_click_millis = 0;
+ }
+
/* now we know that these _coordinates_ aren't in the area.
invalid are: x, y, z, numFingers, fingerWidth
valid are: millis, left/right/middle/up/down/etc.
*/
- if (!inside_active_area) {
+ if (!inside_active_area)
reset_hw_state(hw);
- /* FIXME: if finger accidentally moves into the area and doesn't
- * really release, the finger should remain down. */
- }
-
/* no edge or finger detection outside of area */
if (inside_active_area) {
edge = edge_detection(priv, hw->x, hw->y);
@@ -3080,7 +3208,7 @@ HandleState(InputInfoPtr pInfo, struct SynapticsHwState *hw, CARD32 now,
}
/* Post events */
- if (finger >= FS_TOUCHED && (dx || dy))
+ if (finger >= FS_TOUCHED && (dx || dy) && !ignore_motion)
xf86PostMotionEvent(pInfo->dev, 0, 0, 2, dx, dy);
if (priv->mid_emu_state == MBE_LEFT_CLICK) {
@@ -3127,9 +3255,6 @@ HandleState(InputInfoPtr pInfo, struct SynapticsHwState *hw, CARD32 now,
if (inside_active_area)
store_history(priv, hw->x, hw->y, hw->millis);
- /* Save logical state for transition comparisons */
- SynapticsCopyHwState(priv->old_hw_state, hw);
-
return delay;
}
diff --git a/driver/xf86-input-synaptics/src/synapticsstr.h b/driver/xf86-input-synaptics/src/synapticsstr.h
index 54bc154af..4bd32acee 100644
--- a/driver/xf86-input-synaptics/src/synapticsstr.h
+++ b/driver/xf86-input-synaptics/src/synapticsstr.h
@@ -149,6 +149,23 @@ enum TouchpadModel {
MODEL_UNIBODY_MACBOOK
};
+enum SoftButtonAreas {
+ NO_BUTTON_AREA = -1,
+ BOTTOM_BUTTON_AREA = 0,
+ BOTTOM_RIGHT_BUTTON_AREA = 0,
+ BOTTOM_MIDDLE_BUTTON_AREA = 1,
+ TOP_BUTTON_AREA = 2,
+ TOP_RIGHT_BUTTON_AREA = 2,
+ TOP_MIDDLE_BUTTON_AREA = 3
+};
+
+enum SoftButtonAreaEdges {
+ LEFT = 0,
+ RIGHT = 1,
+ TOP = 2,
+ BOTTOM = 3
+};
+
typedef struct _SynapticsParameters {
/* Parameter data */
int left_edge, right_edge, top_edge, bottom_edge; /* edge coordinates absolute */
@@ -159,6 +176,8 @@ typedef struct _SynapticsParameters {
int tap_time_2; /* max. tapping time for double taps */
int click_time; /* The duration of a single click */
Bool clickpad; /* Device is a has integrated buttons */
+ Bool has_secondary_buttons; /* Device has a top soft-button area */
+ int clickpad_ignore_motion_time; /* Ignore motion for X ms after a click */
int emulate_mid_button_time; /* Max time between left and right button presses to
emulate a middle button press. */
int emulate_twofinger_z; /* pressure threshold to emulate two finger touch (for Alps) */
@@ -205,7 +224,7 @@ typedef struct _SynapticsParameters {
unsigned int resolution_horiz; /* horizontal resolution of touchpad in units/mm */
unsigned int resolution_vert; /* vertical resolution of touchpad in units/mm */
int area_left_edge, area_right_edge, area_top_edge, area_bottom_edge; /* area coordinates absolute */
- int softbutton_areas[2][4]; /* soft button area coordinates, 0 => right, 1 => middle button */
+ int softbutton_areas[4][4]; /* soft button area coordinates, 0 => right, 1 => middle , 2 => secondary right, 3 => secondary middle button */
int hyst_x, hyst_y; /* x and y width of hysteresis box */
} SynapticsParameters;
@@ -216,7 +235,6 @@ struct _SynapticsPrivateRec {
void *proto_data; /* protocol-specific data */
struct SynapticsHwState *hwState;
- struct SynapticsHwState *old_hw_state; /* previous logical hw state */
const char *device; /* device node */
CARD32 timer_time; /* when timer last fired */
@@ -248,6 +266,8 @@ struct _SynapticsPrivateRec {
Bool prev_up; /* Previous up button value, for double click emulation */
enum FingerState finger_state; /* previous finger state */
CARD32 last_motion_millis; /* time of the last motion */
+ enum SoftButtonAreas last_button_area; /* Last button area we were in */
+ int clickpad_click_millis; /* Time of last clickpad click */
enum TapState tap_state; /* State of tap processing */
int tap_max_fingers; /* Max number of fingers seen since entering start state */
diff --git a/driver/xf86-input-synaptics/src/synproto.h b/driver/xf86-input-synaptics/src/synproto.h
index 5a060706d..6af13827e 100644
--- a/driver/xf86-input-synaptics/src/synproto.h
+++ b/driver/xf86-input-synaptics/src/synproto.h
@@ -36,15 +36,19 @@
#include <xf86Xinput.h>
#include <xisb.h>
+#ifndef XI86_SERVER_FD
+#define XI86_SERVER_FD 0x20
+#endif
+
struct _SynapticsPrivateRec;
typedef struct _SynapticsPrivateRec SynapticsPrivate;
enum SynapticsSlotState {
- SLOTSTATE_EMPTY = 0,
- SLOTSTATE_OPEN,
- SLOTSTATE_CLOSE,
- SLOTSTATE_OPEN_EMPTY,
- SLOTSTATE_UPDATE,
+ SLOTSTATE_EMPTY = 0, /* no slot in this cycle */
+ SLOTSTATE_OPEN, /* tracking ID received */
+ SLOTSTATE_CLOSE, /* tracking ID -1 received */
+ SLOTSTATE_OPEN_EMPTY, /* previously had tracking id, no events in this read cycle */
+ SLOTSTATE_UPDATE, /* had tracking id, other events in this cycle */
};
/* used to mark emulated hw button state */
diff --git a/driver/xf86-input-synaptics/test-driver b/driver/xf86-input-synaptics/test-driver
deleted file mode 100755
index 32bf39e83..000000000
--- a/driver/xf86-input-synaptics/test-driver
+++ /dev/null
@@ -1,127 +0,0 @@
-#! /bin/sh
-# test-driver - basic testsuite driver script.
-
-scriptversion=2012-06-27.10; # UTC
-
-# Copyright (C) 2011-2013 Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-# Make unconditional expansion of undefined variables an error. This
-# helps a lot in preventing typo-related bugs.
-set -u
-
-usage_error ()
-{
- echo "$0: $*" >&2
- print_usage >&2
- exit 2
-}
-
-print_usage ()
-{
- cat <<END
-Usage:
- test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
- [--expect-failure={yes|no}] [--color-tests={yes|no}]
- [--enable-hard-errors={yes|no}] [--] TEST-SCRIPT
-The '--test-name', '--log-file' and '--trs-file' options are mandatory.
-END
-}
-
-# TODO: better error handling in option parsing (in particular, ensure
-# TODO: $log_file, $trs_file and $test_name are defined).
-test_name= # Used for reporting.
-log_file= # Where to save the output of the test script.
-trs_file= # Where to save the metadata of the test run.
-expect_failure=no
-color_tests=no
-enable_hard_errors=yes
-while test $# -gt 0; do
- case $1 in
- --help) print_usage; exit $?;;
- --version) echo "test-driver $scriptversion"; exit $?;;
- --test-name) test_name=$2; shift;;
- --log-file) log_file=$2; shift;;
- --trs-file) trs_file=$2; shift;;
- --color-tests) color_tests=$2; shift;;
- --expect-failure) expect_failure=$2; shift;;
- --enable-hard-errors) enable_hard_errors=$2; shift;;
- --) shift; break;;
- -*) usage_error "invalid option: '$1'";;
- esac
- shift
-done
-
-if test $color_tests = yes; then
- # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
- red='' # Red.
- grn='' # Green.
- lgn='' # Light green.
- blu='' # Blue.
- mgn='' # Magenta.
- std='' # No color.
-else
- red= grn= lgn= blu= mgn= std=
-fi
-
-do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
-trap "st=129; $do_exit" 1
-trap "st=130; $do_exit" 2
-trap "st=141; $do_exit" 13
-trap "st=143; $do_exit" 15
-
-# Test script is run here.
-"$@" >$log_file 2>&1
-estatus=$?
-if test $enable_hard_errors = no && test $estatus -eq 99; then
- estatus=1
-fi
-
-case $estatus:$expect_failure in
- 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
- 0:*) col=$grn res=PASS recheck=no gcopy=no;;
- 77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
- 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
- *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
- *:*) col=$red res=FAIL recheck=yes gcopy=yes;;
-esac
-
-# Report outcome to console.
-echo "${col}${res}${std}: $test_name"
-
-# Register the test result, and other relevant metadata.
-echo ":test-result: $res" > $trs_file
-echo ":global-test-result: $res" >> $trs_file
-echo ":recheck: $recheck" >> $trs_file
-echo ":copy-in-global-log: $gcopy" >> $trs_file
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/driver/xf86-input-synaptics/test/Makefile.am b/driver/xf86-input-synaptics/test/Makefile.am
deleted file mode 100644
index 6fbbd2312..000000000
--- a/driver/xf86-input-synaptics/test/Makefile.am
+++ /dev/null
@@ -1,18 +0,0 @@
-if ENABLE_UNIT_TESTS
-AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/include
-AM_CFLAGS = $(XORG_CFLAGS) $(CWARNFLAGS)
-fake_syms = fake-symbols.c fake-symbols.h
-
-if BUILD_EVENTCOMM
-noinst_PROGRAMS = eventcomm-test
-
-eventcomm_test_SOURCES = eventcomm-test.c\
- $(top_srcdir)/src/eventcomm.c \
- $(top_srcdir)/src/synproto.c \
- $(fake_syms)
-
-eventcomm_test_LDADD = $(MTDEV_LIBS)
-endif
-
-TESTS = $(noinst_PROGRAMS)
-endif
diff --git a/driver/xf86-input-synaptics/test/Makefile.in b/driver/xf86-input-synaptics/test/Makefile.in
deleted file mode 100644
index 06d2e0b5b..000000000
--- a/driver/xf86-input-synaptics/test/Makefile.in
+++ /dev/null
@@ -1,715 +0,0 @@
-# Makefile.in generated by automake 1.12.6 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-VPATH = @srcdir@
-am__make_dryrun = \
- { \
- am__dry=no; \
- case $$MAKEFLAGS in \
- *\\[\ \ ]*) \
- echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
- | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
- *) \
- for am__flg in $$MAKEFLAGS; do \
- case $$am__flg in \
- *=*|--*) ;; \
- *n*) am__dry=yes; break;; \
- esac; \
- done;; \
- esac; \
- test $$am__dry = yes; \
- }
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-@BUILD_EVENTCOMM_TRUE@@ENABLE_UNIT_TESTS_TRUE@noinst_PROGRAMS = eventcomm-test$(EXEEXT)
-subdir = test
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(top_srcdir)/depcomp
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
- $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-PROGRAMS = $(noinst_PROGRAMS)
-am__eventcomm_test_SOURCES_DIST = eventcomm-test.c \
- $(top_srcdir)/src/eventcomm.c $(top_srcdir)/src/synproto.c \
- fake-symbols.c fake-symbols.h
-@ENABLE_UNIT_TESTS_TRUE@am__objects_1 = fake-symbols.$(OBJEXT)
-@BUILD_EVENTCOMM_TRUE@@ENABLE_UNIT_TESTS_TRUE@am_eventcomm_test_OBJECTS = eventcomm-test.$(OBJEXT) \
-@BUILD_EVENTCOMM_TRUE@@ENABLE_UNIT_TESTS_TRUE@ eventcomm.$(OBJEXT) \
-@BUILD_EVENTCOMM_TRUE@@ENABLE_UNIT_TESTS_TRUE@ synproto.$(OBJEXT) \
-@BUILD_EVENTCOMM_TRUE@@ENABLE_UNIT_TESTS_TRUE@ $(am__objects_1)
-eventcomm_test_OBJECTS = $(am_eventcomm_test_OBJECTS)
-am__DEPENDENCIES_1 =
-@BUILD_EVENTCOMM_TRUE@@ENABLE_UNIT_TESTS_TRUE@eventcomm_test_DEPENDENCIES = $(am__DEPENDENCIES_1)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-am__v_lt_1 =
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo " GEN " $@;
-am__v_GEN_1 =
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 =
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo " CC " $@;
-am__v_CC_1 =
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
- $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_@AM_V@)
-am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo " CCLD " $@;
-am__v_CCLD_1 =
-SOURCES = $(eventcomm_test_SOURCES)
-DIST_SOURCES = $(am__eventcomm_test_SOURCES_DIST)
-am__can_run_installinfo = \
- case $$AM_UPDATE_INFO_DIR in \
- n|no|NO) false;; \
- *) (install-info --version) >/dev/null 2>&1;; \
- esac
-ETAGS = etags
-CTAGS = ctags
-am__tty_colors_dummy = \
- mgn= red= grn= lgn= blu= brg= std=; \
- am__color_tests=no
-am__tty_colors = $(am__tty_colors_dummy)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-ADMIN_MAN_DIR = @ADMIN_MAN_DIR@
-ADMIN_MAN_SUFFIX = @ADMIN_MAN_SUFFIX@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-APP_MAN_DIR = @APP_MAN_DIR@
-APP_MAN_SUFFIX = @APP_MAN_SUFFIX@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BASE_CFLAGS = @BASE_CFLAGS@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CHANGELOG_CMD = @CHANGELOG_CMD@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CWARNFLAGS = @CWARNFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DRIVER_MAN_DIR = @DRIVER_MAN_DIR@
-DRIVER_MAN_SUFFIX = @DRIVER_MAN_SUFFIX@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-FGREP = @FGREP@
-FILE_MAN_DIR = @FILE_MAN_DIR@
-FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@
-GREP = @GREP@
-INSTALL = @INSTALL@
-INSTALL_CMD = @INSTALL_CMD@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LIB_MAN_DIR = @LIB_MAN_DIR@
-LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MAN_SUBSTS = @MAN_SUBSTS@
-MISC_MAN_DIR = @MISC_MAN_DIR@
-MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
-MKDIR_P = @MKDIR_P@
-MTDEV_CFLAGS = @MTDEV_CFLAGS@
-MTDEV_LIBS = @MTDEV_LIBS@
-NM = @NM@
-NMEDIT = @NMEDIT@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRICT_CFLAGS = @STRICT_CFLAGS@
-STRIP = @STRIP@
-VERSION = @VERSION@
-XI_CFLAGS = @XI_CFLAGS@
-XI_LIBS = @XI_LIBS@
-XORG_CFLAGS = @XORG_CFLAGS@
-XORG_LIBS = @XORG_LIBS@
-XORG_MALLOC_DEBUG_ENV = @XORG_MALLOC_DEBUG_ENV@
-XORG_MAN_PAGE = @XORG_MAN_PAGE@
-XTST_CFLAGS = @XTST_CFLAGS@
-XTST_LIBS = @XTST_LIBS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-configdir = @configdir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-inputdir = @inputdir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sdkdir = @sdkdir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-@ENABLE_UNIT_TESTS_TRUE@AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/include
-@ENABLE_UNIT_TESTS_TRUE@AM_CFLAGS = $(XORG_CFLAGS) $(CWARNFLAGS)
-@ENABLE_UNIT_TESTS_TRUE@fake_syms = fake-symbols.c fake-symbols.h
-@BUILD_EVENTCOMM_TRUE@@ENABLE_UNIT_TESTS_TRUE@eventcomm_test_SOURCES = eventcomm-test.c\
-@BUILD_EVENTCOMM_TRUE@@ENABLE_UNIT_TESTS_TRUE@ $(top_srcdir)/src/eventcomm.c \
-@BUILD_EVENTCOMM_TRUE@@ENABLE_UNIT_TESTS_TRUE@ $(top_srcdir)/src/synproto.c \
-@BUILD_EVENTCOMM_TRUE@@ENABLE_UNIT_TESTS_TRUE@ $(fake_syms)
-
-@BUILD_EVENTCOMM_TRUE@@ENABLE_UNIT_TESTS_TRUE@eventcomm_test_LDADD = $(MTDEV_LIBS)
-@ENABLE_UNIT_TESTS_TRUE@TESTS = $(noinst_PROGRAMS)
-all: all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
- @for dep in $?; do \
- case '$(am__configure_deps)' in \
- *$$dep*) \
- ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
- && { if test -f $@; then exit 0; else break; fi; }; \
- exit 1;; \
- esac; \
- done; \
- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \
- $(am__cd) $(top_srcdir) && \
- $(AUTOMAKE) --foreign test/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
- @case '$?' in \
- *config.status*) \
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
- *) \
- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
- esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstPROGRAMS:
- @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
- echo " rm -f" $$list; \
- rm -f $$list || exit $$?; \
- test -n "$(EXEEXT)" || exit 0; \
- list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
- echo " rm -f" $$list; \
- rm -f $$list
-eventcomm-test$(EXEEXT): $(eventcomm_test_OBJECTS) $(eventcomm_test_DEPENDENCIES) $(EXTRA_eventcomm_test_DEPENDENCIES)
- @rm -f eventcomm-test$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(eventcomm_test_OBJECTS) $(eventcomm_test_LDADD) $(LIBS)
-
-mostlyclean-compile:
- -rm -f *.$(OBJEXT)
-
-distclean-compile:
- -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eventcomm-test.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eventcomm.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fake-symbols.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/synproto.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-
-eventcomm.o: $(top_srcdir)/src/eventcomm.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT eventcomm.o -MD -MP -MF $(DEPDIR)/eventcomm.Tpo -c -o eventcomm.o `test -f '$(top_srcdir)/src/eventcomm.c' || echo '$(srcdir)/'`$(top_srcdir)/src/eventcomm.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/eventcomm.Tpo $(DEPDIR)/eventcomm.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/src/eventcomm.c' object='eventcomm.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o eventcomm.o `test -f '$(top_srcdir)/src/eventcomm.c' || echo '$(srcdir)/'`$(top_srcdir)/src/eventcomm.c
-
-eventcomm.obj: $(top_srcdir)/src/eventcomm.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT eventcomm.obj -MD -MP -MF $(DEPDIR)/eventcomm.Tpo -c -o eventcomm.obj `if test -f '$(top_srcdir)/src/eventcomm.c'; then $(CYGPATH_W) '$(top_srcdir)/src/eventcomm.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/eventcomm.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/eventcomm.Tpo $(DEPDIR)/eventcomm.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/src/eventcomm.c' object='eventcomm.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o eventcomm.obj `if test -f '$(top_srcdir)/src/eventcomm.c'; then $(CYGPATH_W) '$(top_srcdir)/src/eventcomm.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/eventcomm.c'; fi`
-
-synproto.o: $(top_srcdir)/src/synproto.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT synproto.o -MD -MP -MF $(DEPDIR)/synproto.Tpo -c -o synproto.o `test -f '$(top_srcdir)/src/synproto.c' || echo '$(srcdir)/'`$(top_srcdir)/src/synproto.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/synproto.Tpo $(DEPDIR)/synproto.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/src/synproto.c' object='synproto.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o synproto.o `test -f '$(top_srcdir)/src/synproto.c' || echo '$(srcdir)/'`$(top_srcdir)/src/synproto.c
-
-synproto.obj: $(top_srcdir)/src/synproto.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT synproto.obj -MD -MP -MF $(DEPDIR)/synproto.Tpo -c -o synproto.obj `if test -f '$(top_srcdir)/src/synproto.c'; then $(CYGPATH_W) '$(top_srcdir)/src/synproto.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/synproto.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/synproto.Tpo $(DEPDIR)/synproto.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/src/synproto.c' object='synproto.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o synproto.obj `if test -f '$(top_srcdir)/src/synproto.c'; then $(CYGPATH_W) '$(top_srcdir)/src/synproto.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/src/synproto.c'; fi`
-
-mostlyclean-libtool:
- -rm -f *.lo
-
-clean-libtool:
- -rm -rf .libs _libs
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- mkid -fID $$unique
-tags: TAGS
-
-TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- set x; \
- here=`pwd`; \
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- shift; \
- if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
- test -n "$$unique" || unique=$$empty_fix; \
- if test $$# -gt 0; then \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- "$$@" $$unique; \
- else \
- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
- $$unique; \
- fi; \
- fi
-ctags: CTAGS
-CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
- $(TAGS_FILES) $(LISP)
- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
- unique=`for i in $$list; do \
- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
- done | \
- $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
- END { if (nonempty) { for (i in files) print i; }; }'`; \
- test -z "$(CTAGS_ARGS)$$unique" \
- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
- $$unique
-
-GTAGS:
- here=`$(am__cd) $(top_builddir) && pwd` \
- && $(am__cd) $(top_srcdir) \
- && gtags -i $(GTAGS_ARGS) "$$here"
-
-cscopelist: $(HEADERS) $(SOURCES) $(LISP)
- list='$(SOURCES) $(HEADERS) $(LISP)'; \
- case "$(srcdir)" in \
- [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
- *) sdir=$(subdir)/$(srcdir) ;; \
- esac; \
- for i in $$list; do \
- if test -f "$$i"; then \
- echo "$(subdir)/$$i"; \
- else \
- echo "$$sdir/$$i"; \
- fi; \
- done >> $(top_builddir)/cscope.files
-
-distclean-tags:
- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-check-TESTS: $(TESTS)
- @failed=0; all=0; xfail=0; xpass=0; skip=0; \
- srcdir=$(srcdir); export srcdir; \
- list=' $(TESTS) '; \
- $(am__tty_colors); \
- if test -n "$$list"; then \
- for tst in $$list; do \
- if test -f ./$$tst; then dir=./; \
- elif test -f $$tst; then dir=; \
- else dir="$(srcdir)/"; fi; \
- if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \
- all=`expr $$all + 1`; \
- case " $(XFAIL_TESTS) " in \
- *[\ \ ]$$tst[\ \ ]*) \
- xpass=`expr $$xpass + 1`; \
- failed=`expr $$failed + 1`; \
- col=$$red; res=XPASS; \
- ;; \
- *) \
- col=$$grn; res=PASS; \
- ;; \
- esac; \
- elif test $$? -ne 77; then \
- all=`expr $$all + 1`; \
- case " $(XFAIL_TESTS) " in \
- *[\ \ ]$$tst[\ \ ]*) \
- xfail=`expr $$xfail + 1`; \
- col=$$lgn; res=XFAIL; \
- ;; \
- *) \
- failed=`expr $$failed + 1`; \
- col=$$red; res=FAIL; \
- ;; \
- esac; \
- else \
- skip=`expr $$skip + 1`; \
- col=$$blu; res=SKIP; \
- fi; \
- echo "$${col}$$res$${std}: $$tst"; \
- done; \
- if test "$$all" -eq 1; then \
- tests="test"; \
- All=""; \
- else \
- tests="tests"; \
- All="All "; \
- fi; \
- if test "$$failed" -eq 0; then \
- if test "$$xfail" -eq 0; then \
- banner="$$All$$all $$tests passed"; \
- else \
- if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
- banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
- fi; \
- else \
- if test "$$xpass" -eq 0; then \
- banner="$$failed of $$all $$tests failed"; \
- else \
- if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
- banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
- fi; \
- fi; \
- dashes="$$banner"; \
- skipped=""; \
- if test "$$skip" -ne 0; then \
- if test "$$skip" -eq 1; then \
- skipped="($$skip test was not run)"; \
- else \
- skipped="($$skip tests were not run)"; \
- fi; \
- test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
- dashes="$$skipped"; \
- fi; \
- report=""; \
- if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
- report="Please report to $(PACKAGE_BUGREPORT)"; \
- test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
- dashes="$$report"; \
- fi; \
- dashes=`echo "$$dashes" | sed s/./=/g`; \
- if test "$$failed" -eq 0; then \
- col="$$grn"; \
- else \
- col="$$red"; \
- fi; \
- echo "$${col}$$dashes$${std}"; \
- echo "$${col}$$banner$${std}"; \
- test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \
- test -z "$$report" || echo "$${col}$$report$${std}"; \
- echo "$${col}$$dashes$${std}"; \
- test "$$failed" -eq 0; \
- else :; fi
-
-distdir: $(DISTFILES)
- @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
- list='$(DISTFILES)'; \
- dist_files=`for file in $$list; do echo $$file; done | \
- sed -e "s|^$$srcdirstrip/||;t" \
- -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
- case $$dist_files in \
- */*) $(MKDIR_P) `echo "$$dist_files" | \
- sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
- sort -u` ;; \
- esac; \
- for file in $$dist_files; do \
- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
- if test -d $$d/$$file; then \
- dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
- if test -d "$(distdir)/$$file"; then \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
- cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
- find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
- fi; \
- cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
- else \
- test -f "$(distdir)/$$file" \
- || cp -p $$d/$$file "$(distdir)/$$file" \
- || exit 1; \
- fi; \
- done
-check-am: all-am
- $(MAKE) $(AM_MAKEFLAGS) check-TESTS
-check: check-am
-all-am: Makefile $(PROGRAMS)
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
- if test -z '$(STRIP)'; then \
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- install; \
- else \
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
- fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
- -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
- @echo "This command is intended for maintainers to use"
- @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
- mostlyclean-am
-
-distclean: distclean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
- distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
- -rm -rf ./$(DEPDIR)
- -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
- mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: check-am install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
- clean-generic clean-libtool clean-noinstPROGRAMS cscopelist \
- ctags distclean distclean-compile distclean-generic \
- distclean-libtool distclean-tags distdir dvi dvi-am html \
- html-am info info-am install install-am install-data \
- install-data-am install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-info \
- install-info-am install-man install-pdf install-pdf-am \
- install-ps install-ps-am install-strip installcheck \
- installcheck-am installdirs maintainer-clean \
- maintainer-clean-generic mostlyclean mostlyclean-compile \
- mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
- tags uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/driver/xf86-input-synaptics/test/eventcomm-test.c b/driver/xf86-input-synaptics/test/eventcomm-test.c
deleted file mode 100644
index 144d6dca2..000000000
--- a/driver/xf86-input-synaptics/test/eventcomm-test.c
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Copyright © 2011 Red Hat, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without
- * fee, provided that the above copyright notice appear in all copies
- * and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of Red Hat
- * not be used in advertising or publicity pertaining to distribution
- * of the software without specific, written prior permission. Red
- * Hat makes no representations about the suitability of this software
- * for any purpose. It is provided "as is" without express or implied
- * warranty.
- *
- * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
- * NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
- * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- *
- * Authors:
- * Peter Hutterer
- */
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdio.h>
-#include <assert.h>
-
-#include "synapticsstr.h"
-#include "eventcomm.h"
-
-#define ArrayLength(a) (sizeof(a) / (sizeof((a)[0])))
-
-int fd_read, fd_write;
-
-/* A syn event, always handy to have */
-struct input_event syn = { {0, 0}, EV_SYN, SYN_REPORT, 0 };
-
-static void
-create_pipe_fd(void)
-{
- int pipefd[2];
-
- assert(pipe(pipefd) != -1);
-
- fd_read = pipefd[0];
- fd_write = pipefd[1];
-}
-
-static void
-reset_data(struct SynapticsHwState **hw, struct CommData *comm,
- SynapticsPrivate * priv)
-{
- SynapticsHwStateFree(&comm->hwState);
- memset(comm, 0, sizeof(struct CommData));
- SynapticsHwStateFree(hw);
- *hw = SynapticsHwStateAlloc(priv);
- comm->hwState = SynapticsHwStateAlloc(priv);
-}
-
-/**
- * Write n input events to fd, followed by the syn event.
- */
-static void
-write_event(int fd, struct input_event *ev, int n)
-{
- write(fd, ev, sizeof(struct input_event) * n);
- write(fd, &syn, sizeof(syn));
-}
-
-static void
-test_buttons(int fd, InputInfoPtr pInfo, struct CommData *comm)
-{
- SynapticsPrivate *priv = (SynapticsPrivate *) pInfo->private;
- struct SynapticsHwState *hw = NULL;
- struct input_event ev = { {0, 0}, EV_KEY, 0, 0 };
-
- reset_data(&hw, comm, priv);
-
-#define _test_press_release(_code, field) \
- ev.code = (_code); \
- ev.value = 1; \
- write_event(fd, &ev, 1); \
- EventReadHwState(pInfo, comm, hw); \
- assert(hw->field == 1); \
- ev.value = 0; /* button release */ \
- write_event(fd_write, &ev, 1); \
- EventReadHwState(pInfo, comm, hw); \
- assert(hw->field == 0);
-
- _test_press_release(BTN_LEFT, left);
- _test_press_release(BTN_RIGHT, right);
- _test_press_release(BTN_MIDDLE, middle);
- _test_press_release(BTN_FORWARD, up);
- _test_press_release(BTN_BACK, down);
- _test_press_release(BTN_0, multi[0]);
- _test_press_release(BTN_1, multi[1]);
- _test_press_release(BTN_2, multi[2]);
- _test_press_release(BTN_3, multi[3]);
- _test_press_release(BTN_4, multi[4]);
- _test_press_release(BTN_5, multi[5]);
- _test_press_release(BTN_6, multi[6]);
- _test_press_release(BTN_7, multi[7]);
-
- SynapticsHwStateFree(&hw);
-}
-
-/**
- * This test checks that the recognised event fields set the right hardware
- * state. It's a fairly limited test and does not check whether any of the
- * others change the HW state at all.
- */
-static void
-test_read_hw_state(void)
-{
- InputInfoRec info = { 0 };
- SynapticsPrivate private;
- struct SynapticsHwState *hw = NULL;
- struct CommData comm = { 0 };
-
- struct input_event ev[] = {
- {{0, 0}, EV_KEY, BTN_TOOL_FINGER, 1},
- {{0, 0}, EV_KEY, BTN_TOOL_DOUBLETAP, 1},
- {{0, 0}, EV_KEY, BTN_TOOL_TRIPLETAP, 1},
- {{0, 0}, EV_ABS, ABS_X, 42},
- {{0, 0}, EV_ABS, ABS_Y, 21},
- {{0, 0}, EV_ABS, ABS_PRESSURE, 56},
- {{0, 0}, EV_ABS, ABS_TOOL_WIDTH, 204},
- };
-
- memset(&private, 0, sizeof(private));
-
- info.private = &private;
- info.fd = fd_read;
-
- private.proto_data = EventProtoDataAlloc();
-
- /* just the syn event */
- reset_data(&hw, &comm, &private);
- write(fd_write, &syn, sizeof(syn));
- EventReadHwState(&info, &comm, hw);
- assert(hw->numFingers == 0);
-
- /* one finger */
- reset_data(&hw, &comm, &private);
- write_event(fd_write, &ev[0], 1);
- EventReadHwState(&info, &comm, hw);
- assert(hw->numFingers == 1);
-
- /* two fingers */
- reset_data(&hw, &comm, &private);
- write_event(fd_write, &ev[1], 1);
- EventReadHwState(&info, &comm, hw);
- assert(hw->numFingers == 2);
-
- /* three fingers */
- reset_data(&hw, &comm, &private);
- write_event(fd_write, &ev[2], 1);
- EventReadHwState(&info, &comm, hw);
- assert(hw->numFingers == 3);
-
- /* x/y data */
- reset_data(&hw, &comm, &private);
- write_event(fd_write, &ev[3], 2);
- EventReadHwState(&info, &comm, hw);
- assert(hw->x == ev[3].value);
- assert(hw->y == ev[4].value);
-
- /* pressure */
- reset_data(&hw, &comm, &private);
- write_event(fd_write, &ev[5], 1);
- EventReadHwState(&info, &comm, hw);
- assert(hw->z == ev[5].value);
-
- /* finger width */
- reset_data(&hw, &comm, &private);
- write_event(fd_write, &ev[6], 1);
- EventReadHwState(&info, &comm, hw);
- assert(hw->fingerWidth == ev[6].value);
-
- /* the various buttons */
- test_buttons(fd_write, &info, &comm);
-
- free(private.proto_data);
- SynapticsHwStateFree(&hw);
- SynapticsHwStateFree(&comm.hwState);
-}
-
-static Bool
-compare_hw_state(const struct SynapticsHwState *a,
- const struct SynapticsHwState *b)
-{
-#define COMPARE(x) \
- if (a->x != b->x) return a->x - b->x
-
- COMPARE(millis);
- COMPARE(x);
- COMPARE(y);
- COMPARE(z);
- COMPARE(numFingers);
- COMPARE(fingerWidth);
- COMPARE(left);
- COMPARE(right);
- COMPARE(up);
- COMPARE(down);
- if (memcmp(a->multi, b->multi, sizeof(a->multi)))
- return memcmp(a->multi, b->multi, sizeof(a->multi));
- COMPARE(middle);
-
-#undef COMPARE
-
- return 0;
-}
-
-/**
- * Make sure that axes/keys unknown to the driver don't change the hardware
- * state.
- */
-static void
-test_ignore_hw_state(void)
-{
- int i;
- InputInfoRec info = { 0 };
- SynapticsPrivate private;
- struct SynapticsHwState *hw = NULL;
- struct SynapticsHwState *hw_zero = NULL;
- struct CommData comm = { 0 };
-
- int known_abs[] = {
- ABS_X,
- ABS_Y,
- ABS_PRESSURE,
- ABS_TOOL_WIDTH,
- };
-
- int known_keys[] = {
- BTN_LEFT,
- BTN_RIGHT,
- BTN_MIDDLE,
- BTN_FORWARD,
- BTN_BACK,
- BTN_0,
- BTN_1,
- BTN_2,
- BTN_3,
- BTN_4,
- BTN_5,
- BTN_6,
- BTN_7,
- BTN_TOOL_FINGER,
- BTN_TOOL_DOUBLETAP,
- BTN_TOOL_TRIPLETAP,
- BTN_TOUCH
- };
-
- struct input_event ev = { {0, 0}, 0, 0, 1 };
-
- memset(&private, 0, sizeof(private));
- info.private = &private;
- info.fd = fd_read;
-
- private.proto_data = EventProtoDataAlloc();
-
- reset_data(&hw_zero, &comm, &private);
-
-#define _assert_no_change(_type, _code) \
- reset_data(&hw, &comm, &private); \
- ev.type = _type; \
- ev.code = _code; \
- ev.value = 1; \
- write_event(fd_write, &ev, 1); \
- EventReadHwState(&info, &comm, hw); \
- assert(compare_hw_state(hw, hw_zero) == 0);
-
- for (i = ABS_X; i < ABS_MAX; i++) {
- int j, skip = 0;
-
- for (j = 0; j < ArrayLength(known_abs); j++) {
- if (i == known_abs[j]) {
- skip = 1;
- break;
- }
- }
-
- if (skip)
- continue;
-
- _assert_no_change(EV_ABS, i);
- }
-
- for (i = KEY_RESERVED; i < KEY_MAX; i++) {
- int j, skip = 0;
-
- for (j = 0; j < ArrayLength(known_keys); j++) {
- if (i == known_keys[j]) {
- skip = 1;
- break;
- }
- }
-
- if (skip)
- continue;
-
- _assert_no_change(EV_KEY, i);
- }
-
- free(private.proto_data);
- SynapticsHwStateFree(&hw);
- SynapticsHwStateFree(&hw_zero);
- SynapticsHwStateFree(&comm.hwState);
-}
-
-int
-main(int argc, char **argv)
-{
- create_pipe_fd();
-
- test_read_hw_state();
- test_ignore_hw_state();
- return 0;
-}
diff --git a/driver/xf86-input-synaptics/test/fake-symbols.c b/driver/xf86-input-synaptics/test/fake-symbols.c
deleted file mode 100644
index 0100fd14a..000000000
--- a/driver/xf86-input-synaptics/test/fake-symbols.c
+++ /dev/null
@@ -1,452 +0,0 @@
-#include "fake-symbols.h"
-
-_X_EXPORT int
-xf86ReadSerial(int fd, void *buf, int count)
-{
- return 0;
-}
-
-_X_EXPORT int
-xf86WriteSerial(int fd, const void *buf, int count)
-{
- return 0;
-}
-
-_X_EXPORT int
-xf86CloseSerial(int fd)
-{
- return 0;
-}
-
-_X_EXPORT int
-xf86WaitForInput(int fd, int timeout)
-{
- return 0;
-}
-
-_X_EXPORT int
-xf86OpenSerial(XF86OptionPtr options)
-{
- return 0;
-}
-
-_X_EXPORT int
-xf86SetSerialSpeed(int fd, int speed)
-{
- return 0;
-}
-
-_X_EXPORT XF86OptionPtr
-xf86ReplaceIntOption(XF86OptionPtr optlist, const char *name, const int val)
-{
- return NULL;
-}
-
-_X_EXPORT char *
-xf86SetStrOption(XF86OptionPtr optlist, const char *name, const char *deflt)
-{
- return NULL;
-}
-
-_X_EXPORT int
-xf86SetBoolOption(XF86OptionPtr optlist, const char *name, int deflt)
-{
- return 0;
-}
-
-_X_EXPORT XF86OptionPtr
-xf86AddNewOption(XF86OptionPtr head, const char *name, const char *val)
-{
- return NULL;
-}
-
-_X_EXPORT const char *
-xf86FindOptionValue(XF86OptionPtr options, const char *name)
-{
- return NULL;
-}
-
-_X_EXPORT char *
-xf86OptionName(XF86OptionPtr opt)
-{
- return NULL;
-}
-
-_X_EXPORT char *
-xf86OptionValue(XF86OptionPtr opt)
-{
- return NULL;
-}
-
-_X_EXPORT int
-xf86NameCmp(const char *s1, const char *s2)
-{
- return 0;
-}
-
-_X_EXPORT void
-xf86AddEnabledDevice(InputInfoPtr pInfo)
-{
- return;
-}
-
-_X_EXPORT void
-xf86RemoveEnabledDevice(InputInfoPtr pInfo)
-{
- return;
-}
-
-_X_EXPORT Atom
-XIGetKnownProperty(char *name)
-{
- return None;
-}
-
-_X_EXPORT void
-xf86AddInputDriver(InputDriverPtr driver, pointer module, int flags)
-{
- return;
-}
-
-_X_EXPORT int
-xf86ScaleAxis(int Cx, int to_max, int to_min, int from_max, int from_min)
-{
- int X;
- int64_t to_width = to_max - to_min;
- int64_t from_width = from_max - from_min;
-
- if (from_width) {
- X = (int) (((to_width * (Cx - from_min)) / from_width) + to_min);
- }
- else {
- X = 0;
- /*ErrorF ("Divide by Zero in xf86ScaleAxis\n"); */
- }
-
- if (X > to_max)
- X = to_max;
- if (X < to_min)
- X = to_min;
-
- return X;
-}
-
-_X_EXPORT void
-DeleteInputDeviceRequest(DeviceIntPtr pDev)
-{
- return;
-}
-
-_X_EXPORT void
-FreeInputAttributes(InputAttributes * attrs)
-{
- return;
-}
-
-_X_EXPORT void
-xf86PostButtonEvent(DeviceIntPtr device,
- int is_absolute,
- int button,
- int is_down, int first_valuator, int num_valuators, ...)
-{
- return;
-}
-
-_X_EXPORT int
-Xasprintf(char **ret, const char *format, ...)
-{
- return 0;
-}
-
-_X_EXPORT int
-XISetDevicePropertyDeletable(DeviceIntPtr dev, Atom property, Bool deletable)
-{
- return 0;
-}
-
-_X_EXPORT InputInfoPtr
-xf86FirstLocalDevice(void)
-{
- return NULL;
-}
-
-_X_EXPORT void
-xf86DeleteInput(InputInfoPtr pInp, int flags)
-{
- return;
-}
-
-_X_EXPORT XF86OptionPtr
-xf86OptionListDuplicate(XF86OptionPtr options)
-{
- return NULL;
-}
-
-_X_EXPORT Bool
-InitButtonClassDeviceStruct(DeviceIntPtr dev, int numButtons, Atom *labels,
- CARD8 *map)
-{
- return FALSE;
-}
-
-_X_EXPORT void
-InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, Atom label, int minval,
- int maxval, int resolution, int min_res, int max_res,
- int mode)
-{
- return;
-}
-
-_X_EXPORT void
-xf86PostKeyboardEvent(DeviceIntPtr device, unsigned int key_code, int is_down)
-{
- return;
-}
-
-_X_EXPORT int
-xf86SetIntOption(XF86OptionPtr optlist, const char *name, int deflt)
-{
- return 0;
-}
-
-_X_EXPORT void
-xf86PostButtonEventP(DeviceIntPtr device,
- int is_absolute,
- int button,
- int is_down, int first_valuator, int num_valuators,
- const int *valuators)
-{
- return;
-}
-
-_X_EXPORT Bool
-InitPtrFeedbackClassDeviceStruct(DeviceIntPtr dev, PtrCtrlProcPtr controlProc)
-{
- return FALSE;
-}
-
-_X_EXPORT int
-XIChangeDeviceProperty(DeviceIntPtr dev, Atom property, Atom type,
- int format, int mode, unsigned long len,
- XF86OptionPtr value, Bool sendevent)
-{
- return 0;
-}
-
-_X_EXPORT CARD32
-GetTimeInMillis(void)
-{
- return 0;
-}
-
-_X_EXPORT int
-NewInputDeviceRequest(InputOption *options,
- InputAttributes * attrs,
- DeviceIntPtr *pdev)
-{
- return 0;
-}
-
-_X_EXPORT Bool
-InitLedFeedbackClassDeviceStruct(DeviceIntPtr dev, LedCtrlProcPtr controlProc)
-{
- return FALSE;
-}
-
-_X_EXPORT InputAttributes *
-DuplicateInputAttributes(InputAttributes * attrs)
-{
- return NULL;
-}
-
-_X_EXPORT int
-ValidAtom(Atom atom)
-{
- return None;
-}
-
-_X_EXPORT Bool
-InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet * rmlvo,
- BellProcPtr bell_func, KbdCtrlProcPtr ctrl_func)
-{
- return FALSE;
-}
-
-_X_EXPORT long
-XIRegisterPropertyHandler(DeviceIntPtr dev,
- int (*SetProperty) (DeviceIntPtr dev,
- Atom property,
- XIPropertyValuePtr prop,
- BOOL checkonly),
- int (*GetProperty) (DeviceIntPtr dev,
- Atom property),
- int (*DeleteProperty) (DeviceIntPtr dev,
- Atom property))
-{
- return 0;
-}
-
-_X_EXPORT int
-InitProximityClassDeviceStruct(DeviceIntPtr dev)
-{
- return 0;
-}
-
-_X_EXPORT void
-xf86Msg(MessageType type, const char *format, ...)
-{
- return;
-}
-
-_X_EXPORT void
-xf86MsgVerb(MessageType type, int verb, const char *format, ...)
-{
- return;
-}
-
-_X_EXPORT void
-xf86IDrvMsg(InputInfoPtr dev, MessageType type, const char *format, ...)
-{
- return;
-}
-
-_X_EXPORT void
-LogMessageVerbSigSafe(MessageType type, int verb, const char *format, ...)
-{
- return;
-}
-
-_X_EXPORT void
-xf86PostMotionEventP(DeviceIntPtr device,
- int is_absolute, int first_valuator, int num_valuators,
- const int *valuators)
-{
- return;
-}
-
-_X_EXPORT Bool
-InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
- int numMotionEvents, int mode)
-{
- return FALSE;
-}
-
-_X_EXPORT XF86OptionPtr
-xf86ReplaceStrOption(XF86OptionPtr optlist, const char *name, const char *val)
-{
- return NULL;
-}
-
-_X_EXPORT XF86OptionPtr
-xf86NextOption(XF86OptionPtr list)
-{
- return NULL;
-}
-
-_X_EXPORT int
-XIGetDeviceProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr *value)
-{
- return 0;
-}
-
-_X_EXPORT Atom
-MakeAtom(const char *string, unsigned len, Bool makeit)
-{
- return None;
-}
-
-_X_EXPORT int
-GetMotionHistorySize(void)
-{
- return 0;
-}
-
-_X_EXPORT void
-xf86PostProximityEventP(DeviceIntPtr device,
- int is_in, int first_valuator, int num_valuators,
- const int *valuators)
-{
- return;
-}
-
-_X_EXPORT Bool
-InitFocusClassDeviceStruct(DeviceIntPtr dev)
-{
- return FALSE;
-}
-
-void
-xf86ProcessCommonOptions(InputInfoPtr pInfo, XF86OptionPtr list)
-{
-}
-
-void
-xf86CollectInputOptions(InputInfoPtr pInfo,
- const char **defaultOpts)
-{
-}
-
-InputInfoPtr
-xf86AllocateInput(void)
-{
- return NULL;
-}
-
-ClientPtr serverClient;
-
-Bool
-QueueWorkProc(Bool (*function)
- (ClientPtr /* pClient */ , pointer /* closure */ ),
- ClientPtr client, pointer closure)
-{
- return FALSE;
-}
-
-_X_EXPORT ValuatorMask *
-valuator_mask_new(int num_valuators)
-{
- return NULL;
-}
-
-_X_EXPORT void
-valuator_mask_free(ValuatorMask **mask)
-{
-}
-
-_X_EXPORT int
-valuator_mask_get(const ValuatorMask *mask, int valuator)
-{
- return 0;
-}
-
-_X_EXPORT void
-valuator_mask_set(ValuatorMask *mask, int valuator, int data)
-{
-}
-
-extern _X_EXPORT void
-valuator_mask_unset(ValuatorMask *mask, int bit)
-{
-}
-
-_X_EXPORT int
-valuator_mask_num_valuators(const ValuatorMask *mask)
-{
- return 0;
-}
-
-_X_EXPORT void
-valuator_mask_zero(ValuatorMask *mask)
-{
-}
-
-_X_EXPORT void
-valuator_mask_copy(ValuatorMask *dest, const ValuatorMask *src)
-{
-}
-
-_X_EXPORT void
-xf86PostTouchEvent(DeviceIntPtr dev, uint32_t touchid,
- uint16_t type, uint32_t flags, const ValuatorMask *mask)
-{
-}
diff --git a/driver/xf86-input-synaptics/test/fake-symbols.h b/driver/xf86-input-synaptics/test/fake-symbols.h
deleted file mode 100644
index 5be40b9d3..000000000
--- a/driver/xf86-input-synaptics/test/fake-symbols.h
+++ /dev/null
@@ -1,156 +0,0 @@
-#include <xorg-server.h>
-#include <xf86Xinput.h>
-
-extern int xf86ReadSerial(int fd, void *buf, int count);
-extern int xf86WriteSerial(int fd, const void *buf, int count);
-extern int xf86CloseSerial(int fd);
-extern int xf86WaitForInput(int fd, int timeout);
-extern int xf86OpenSerial(XF86OptionPtr options);
-extern int xf86SetSerialSpeed(int fd, int speed);
-
-extern XF86OptionPtr xf86ReplaceIntOption(XF86OptionPtr optlist, const char *name,
- const int val);
-extern XF86OptionPtr xf86AddNewOption(XF86OptionPtr head, const char *name,
- const char *val);
-extern char *xf86OptionName(XF86OptionPtr opt);
-extern const char *xf86FindOptionValue(XF86OptionPtr options, const char *name);
-extern int xf86NameCmp(const char *s1, const char *s2);
-
-extern char *xf86SetStrOption(XF86OptionPtr optlist, const char *name,
- const char *deflt);
-extern int xf86SetBoolOption(XF86OptionPtr optlist, const char *name, int deflt);
-extern XF86OptionPtr xf86AddNewOption(XF86OptionPtr head, const char *name,
- const char *val);
-extern const char *xf86FindOptionValue(XF86OptionPtr options, const char *name);
-extern char *xf86OptionName(XF86OptionPtr opt);
-extern char *xf86OptionValue(XF86OptionPtr opt);
-extern int xf86NameCmp(const char *s1, const char *s2);
-extern void xf86AddEnabledDevice(InputInfoPtr pInfo);
-extern void xf86RemoveEnabledDevice(InputInfoPtr pInfo);
-extern Atom XIGetKnownProperty(char *name);
-extern void xf86AddInputDriver(InputDriverPtr driver, pointer module,
- int flags);
-extern int
- xf86ScaleAxis(int Cx, int to_max, int to_min, int from_max, int from_min);
-
-extern void DeleteInputDeviceRequest(DeviceIntPtr pDev);
-extern void FreeInputAttributes(InputAttributes * attrs);
-extern void
-
-xf86PostButtonEvent(DeviceIntPtr device,
- int is_absolute,
- int button,
- int is_down, int first_valuator, int num_valuators, ...);
-extern int Xasprintf(char **ret, const char *format, ...);
-extern int
- XISetDevicePropertyDeletable(DeviceIntPtr dev, Atom property, Bool deletable);
-
-extern InputInfoPtr xf86FirstLocalDevice(void);
-extern void xf86DeleteInput(InputInfoPtr pInp, int flags);
-extern XF86OptionPtr xf86OptionListDuplicate(XF86OptionPtr options);
-extern Bool
-
-InitButtonClassDeviceStruct(DeviceIntPtr dev, int numButtons, Atom *labels,
- CARD8 *map);
-extern void
-
-InitValuatorAxisStruct(DeviceIntPtr dev, int axnum, Atom label, int minval,
- int maxval, int resolution, int min_res, int max_res,
- int mode);
-extern void
- xf86PostKeyboardEvent(DeviceIntPtr device, unsigned int key_code, int is_down);
-extern int
- xf86SetIntOption(XF86OptionPtr optlist, const char *name, int deflt);
-extern void
-
-xf86PostButtonEventP(DeviceIntPtr device,
- int is_absolute,
- int button,
- int is_down, int first_valuator, int num_valuators,
- const int *valuators);
-extern Bool
- InitPtrFeedbackClassDeviceStruct(DeviceIntPtr dev, PtrCtrlProcPtr controlProc);
-
-extern int
-
-XIChangeDeviceProperty(DeviceIntPtr dev, Atom property, Atom type,
- int format, int mode, unsigned long len,
- XF86OptionPtr value, Bool sendevent);
-extern CARD32 GetTimeInMillis(void);
-
-extern int
- NewInputDeviceRequest(InputOption *options,
- InputAttributes * attrs,
- DeviceIntPtr *pdev);
-
-extern Bool
- InitLedFeedbackClassDeviceStruct(DeviceIntPtr dev, LedCtrlProcPtr controlProc);
-
-extern InputAttributes *DuplicateInputAttributes(InputAttributes * attrs);
-extern int ValidAtom(Atom atom);
-extern Bool
-
-InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet * rmlvo,
- BellProcPtr bell_func, KbdCtrlProcPtr ctrl_func);
-extern long
-
-XIRegisterPropertyHandler(DeviceIntPtr dev,
- int (*SetProperty) (DeviceIntPtr dev,
- Atom property,
- XIPropertyValuePtr prop,
- BOOL checkonly),
- int (*GetProperty) (DeviceIntPtr dev,
- Atom property),
- int (*DeleteProperty) (DeviceIntPtr dev,
- Atom property));
-extern int InitProximityClassDeviceStruct(DeviceIntPtr dev);
-extern void xf86Msg(MessageType type, const char *format, ...);
-extern void xf86MsgVerb(MessageType type, int verb, const char *format, ...);
-extern void xf86IDrvMsg(InputInfoPtr dev, MessageType type, const char *format,
- ...);
-
-extern void
-xf86PostMotionEventP(DeviceIntPtr device,
- int is_absolute, int first_valuator, int num_valuators,
- const int *valuators);
-
-extern Bool
-
-InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
- int numMotionEvents, int mode);
-
-extern XF86OptionPtr
-xf86ReplaceStrOption(XF86OptionPtr optlist, const char *name, const char *val);
-
-extern XF86OptionPtr xf86NextOption(XF86OptionPtr list);
-
-extern int
-
-XIGetDeviceProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr *value);
-
-extern Atom MakeAtom(const char *string, unsigned len, Bool makeit);
-
-extern int GetMotionHistorySize(void);
-
-extern void
-xf86PostProximityEventP(DeviceIntPtr device,
- int is_in, int first_valuator, int num_valuators,
- const int *valuators);
-
-extern Bool InitFocusClassDeviceStruct(DeviceIntPtr dev);
-
-extern void
- xf86ProcessCommonOptions(InputInfoPtr pInfo, XF86OptionPtr list);
-
-extern void
-xf86CollectInputOptions(InputInfoPtr pInfo,
- const char **defaultOpts);
-
-extern InputInfoPtr xf86AllocateInput(void);
-
-extern ClientPtr serverClient;
-
-extern Bool
-QueueWorkProc(Bool (*function)
- (ClientPtr /* pClient */ , pointer /* closure */ ),
- ClientPtr client, pointer closure);
diff --git a/driver/xf86-input-synaptics/tools/Makefile.in b/driver/xf86-input-synaptics/tools/Makefile.in
index 6ae5eb18f..26f3563b7 100644
--- a/driver/xf86-input-synaptics/tools/Makefile.in
+++ b/driver/xf86-input-synaptics/tools/Makefile.in
@@ -186,6 +186,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
+LIBEVDEV_CFLAGS = @LIBEVDEV_CFLAGS@
+LIBEVDEV_LIBS = @LIBEVDEV_LIBS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
@@ -194,15 +196,12 @@ LIB_MAN_SUFFIX = @LIB_MAN_SUFFIX@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
-MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MAN_SUBSTS = @MAN_SUBSTS@
MISC_MAN_DIR = @MISC_MAN_DIR@
MISC_MAN_SUFFIX = @MISC_MAN_SUFFIX@
MKDIR_P = @MKDIR_P@
-MTDEV_CFLAGS = @MTDEV_CFLAGS@
-MTDEV_LIBS = @MTDEV_LIBS@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -301,7 +300,7 @@ all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -326,9 +325,9 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-binPROGRAMS: $(bin_PROGRAMS)