[PATCH v2 synaptics] Disable GrabEventDevice by default

Hans de Goede hdegoede at redhat.com
Fri Mar 21 03:10:18 PDT 2014


Hi,

On 03/21/2014 04:08 AM, Peter Hutterer wrote:
> 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, possibly more so than whatever static
> configurations are still out there. Let's see how much pain this causes.
> 
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

The commit msg could use some updating since you've now fixed the problem with
existing static configs. Other then that this version indeed seems better:

Reviewed-by: Hans de Goede <hdegoede at redhat.com>

Regards,

Hans


> ---
> I thought about this some more and figured we might as well fix some of the
> pain ahead of time. If there is a static InputDevice section for a synaptics
> device, and AutoAddDevices is enabled (the default), just disabling
> GrabEventDevice _will_ cause duplicate devices.
> 
> So here's a small but hopefully effective enough fix for that: only disable
> the grab if the synaptics device itself is hotplugged. The config backend
> (udev, hal, wscons) should make sure that we don't get the same device twice
> anyway.
> 
>  src/synaptics.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/src/synaptics.c b/src/synaptics.c
> index 07fd450..f4c1d4a 100644
> --- a/src/synaptics.c
> +++ b/src/synaptics.c
> @@ -576,6 +576,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
> @@ -747,7 +749,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 =
> 


More information about the xorg-devel mailing list