summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2010-09-19 09:49:59 +0200
committerPeter Hutterer <peter.hutterer@who-t.net>2010-10-05 14:37:26 +1000
commitf5687a6741a19ef3081e7fd83ac55f6df8bcd5c2 (patch)
tree25de083d8c888d1d8a37f27faba819a879574ace
parentf2039cb7fba41032ec87315a3a4511472a5ef0dc (diff)
config: don't autoprobe when device was set
If device was already set, we were asked to handle that specific device and we should not go probing around. If we do, we might end up handling a device different from what the X server thinks we are handling, with dire consequences in case of hot plugging and unplugging. Without this patch, a situation such as the following can happen. A user has both a built-in laptop touchpad and a tablet such as the Wacom Bamboo Pen & Touch, that is also exposed as a touchpad. The tablet is plugged in before the server starts, and during setup the server calls the synaptic driver for the /dev/input/mouseX device corresponding to the touch device of the tablet; we end up in the autoprobe path even though `device' was set, and the driver scans /dev/input, where the first useful device it finds is the event device for the built-in touchpad. The driver starts managing the built-in touchpad, preventing future instances from managing it too, while the server thinks the driver is managing the tablet. When the user disconnects the tablet, the corresponding instance of the synpatics driver (which is actually managing the touchpad instead) is unloaded: the built-in touchpad stops working in X. Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com> Reviewed-by: Chase Douglas <chase.douglas@canonical.com> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r--src/synaptics.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/synaptics.c b/src/synaptics.c
index 57b463c..d112550 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -275,7 +275,7 @@ SetDeviceAndProtocol(InputInfoPtr pInfo)
proto = SYN_PROTO_ALPS;
} else { /* default to auto-dev */
#ifdef BUILD_EVENTCOMM
- if (event_proto_operations.AutoDevProbe(pInfo))
+ if (!device && event_proto_operations.AutoDevProbe(pInfo))
proto = SYN_PROTO_EVENT;
#endif
}