[PATCH synaptics] eventcomm: Drop requirement for a grab during init
Hans de Goede
hdegoede at redhat.com
Mon May 19 02:55:24 PDT 2014
Hi,
On 05/19/2014 03:45 AM, Peter Hutterer wrote:
> When we required a grab on the device, this was a shortcut so we didn't have
> to query the device only to realise we can't read events off it anyway. Now
> that we don't actually grab the device by default, this is unnecessary.
>
> Something else may have a temporary grab on the device during init, in which
> case we just continue as usual and read events if and when they become
> available.
>
> Somewhat related to #77480.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
Looks good:
Reviewed-by: Hans de Goede <hdegoede at redhat.com>
Regards,
Hans
> ---
> src/eventcomm.c | 37 ++++++++++---------------------------
> 1 file changed, 10 insertions(+), 27 deletions(-)
>
> diff --git a/src/eventcomm.c b/src/eventcomm.c
> index 3f9da7c..6e45d56 100644
> --- a/src/eventcomm.c
> +++ b/src/eventcomm.c
> @@ -331,49 +331,33 @@ EventDeviceOffHook(InputInfoPtr pInfo)
> * - BTN_TOOL_PEN is _not_ set
> *
> * @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(struct libevdev *evdev, BOOL test_grab)
> +event_query_is_touchpad(struct libevdev *evdev)
> {
> - int ret = FALSE, rc;
> -
> - if (test_grab) {
> - rc = libevdev_grab(evdev, LIBEVDEV_GRAB);
> - if (rc < 0)
> - return FALSE;
> - }
> -
> /* Check for ABS_X, ABS_Y, ABS_PRESSURE and BTN_TOOL_FINGER */
> if (!libevdev_has_event_type(evdev, EV_SYN) ||
> !libevdev_has_event_type(evdev, EV_ABS) ||
> !libevdev_has_event_type(evdev, EV_KEY))
> - goto unwind;
> + return FALSE;
>
> if (!libevdev_has_event_code(evdev, EV_ABS, ABS_X) ||
> !libevdev_has_event_code(evdev, EV_ABS, ABS_Y))
> - goto unwind;
> + return FALSE;
>
> /* we expect touchpad either report raw pressure or touches */
> if (!libevdev_has_event_code(evdev, EV_KEY, BTN_TOUCH) &&
> !libevdev_has_event_code(evdev, EV_ABS, ABS_PRESSURE))
> - goto unwind;
> + return FALSE;
>
> /* all Synaptics-like touchpad report BTN_TOOL_FINGER */
> 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;
> + return FALSE;
>
> - ret = TRUE;
> -
> - unwind:
> - if (test_grab)
> - libevdev_grab(evdev, LIBEVDEV_UNGRAB);
> -
> - return (ret == TRUE);
> + return TRUE;
> }
>
> #define PRODUCT_ANY 0x0000
> @@ -565,8 +549,7 @@ EventQueryHardware(InputInfoPtr pInfo)
> SynapticsPrivate *priv = (SynapticsPrivate *) pInfo->private;
> struct eventcomm_proto_data *proto_data = priv->proto_data;
>
> - if (!event_query_is_touchpad(proto_data->evdev,
> - (proto_data) ? proto_data->need_grab : TRUE))
> + if (!event_query_is_touchpad(proto_data->evdev))
> return FALSE;
>
> xf86IDrvMsg(pInfo, X_PROBED, "touchpad found\n");
> @@ -967,7 +950,7 @@ EventReadDevDimensions(InputInfoPtr pInfo)
> proto_data->axis_map[i] = -1;
> proto_data->cur_slot = -1;
>
> - if (event_query_is_touchpad(proto_data->evdev, proto_data->need_grab)) {
> + if (event_query_is_touchpad(proto_data->evdev)) {
> event_query_touch(pInfo);
> event_query_axis_ranges(pInfo);
> }
> @@ -1001,7 +984,7 @@ EventAutoDevProbe(InputInfoPtr pInfo, const char *device)
>
> rc = libevdev_new_from_fd(fd, &evdev);
> if (rc >= 0) {
> - touchpad_found = event_query_is_touchpad(evdev, TRUE);
> + touchpad_found = event_query_is_touchpad(evdev);
> libevdev_free(evdev);
> }
>
> @@ -1043,7 +1026,7 @@ EventAutoDevProbe(InputInfoPtr pInfo, const char *device)
>
> rc = libevdev_new_from_fd(fd, &evdev);
> if (rc >= 0) {
> - touchpad_found = event_query_is_touchpad(evdev, TRUE);
> + touchpad_found = event_query_is_touchpad(evdev);
> libevdev_free(evdev);
> if (touchpad_found) {
> xf86IDrvMsg(pInfo, X_PROBED, "auto-dev sets device to %s\n",
>
More information about the xorg-devel
mailing list