[PATCH libinput] touchpad: disable right-edge palm detection for edge scrolling

Hans de Goede hdegoede at redhat.com
Tue Jun 16 03:00:56 PDT 2015


Hi,

On 16-06-15 08:17, Peter Hutterer wrote:
> Most scroll motions would be labelled a palm.
>
> https://bugs.freedesktop.org/show_bug.cgi?id=90980
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

Looks good to me:

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

Regards,

Hans


> ---
>   src/evdev-mt-touchpad-edge-scroll.c |  2 +-
>   src/evdev-mt-touchpad.c             |  3 +++
>   src/evdev-mt-touchpad.h             |  3 +++
>   test/touchpad.c                     | 21 +++++++++++++++++++++
>   4 files changed, 28 insertions(+), 1 deletion(-)
>
> diff --git a/src/evdev-mt-touchpad-edge-scroll.c b/src/evdev-mt-touchpad-edge-scroll.c
> index f5cfa9d..56f1e8a 100644
> --- a/src/evdev-mt-touchpad-edge-scroll.c
> +++ b/src/evdev-mt-touchpad-edge-scroll.c
> @@ -75,7 +75,7 @@ edge_event_to_str(enum scroll_event event)
>   	return NULL;
>   }
>
> -static uint32_t
> +uint32_t
>   tp_touch_get_edge(struct tp_dispatch *tp, struct tp_touch *t)
>   {
>   	uint32_t edge = EDGE_NONE;
> diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
> index 293760d..356f9b9 100644
> --- a/src/evdev-mt-touchpad.c
> +++ b/src/evdev-mt-touchpad.c
> @@ -558,6 +558,9 @@ tp_palm_detect(struct tp_dispatch *tp, struct tp_touch *t, uint64_t time)
>   	    tp_button_is_inside_softbutton_area(tp, t))
>   		return;
>
> +	if (tp_touch_get_edge(tp, t) & EDGE_RIGHT)
> +		return;
> +
>   	t->palm.state = PALM_EDGE;
>   	t->palm.time = time;
>   	t->palm.first = t->point;
> diff --git a/src/evdev-mt-touchpad.h b/src/evdev-mt-touchpad.h
> index 04610af..9357969 100644
> --- a/src/evdev-mt-touchpad.h
> +++ b/src/evdev-mt-touchpad.h
> @@ -399,6 +399,9 @@ tp_edge_scroll_stop_events(struct tp_dispatch *tp, uint64_t time);
>   int
>   tp_edge_scroll_touch_active(struct tp_dispatch *tp, struct tp_touch *t);
>
> +uint32_t
> +tp_touch_get_edge(struct tp_dispatch *tp, struct tp_touch *t);
> +
>   int
>   tp_init_gesture(struct tp_dispatch *tp);
>
> diff --git a/test/touchpad.c b/test/touchpad.c
> index 8e68597..d6e3cf2 100644
> --- a/test/touchpad.c
> +++ b/test/touchpad.c
> @@ -3330,6 +3330,26 @@ START_TEST(touchpad_palm_detect_at_edge)
>   }
>   END_TEST
>
> +START_TEST(touchpad_no_palm_detect_at_edge_for_edge_scrolling)
> +{
> +	struct litest_device *dev = litest_current_device();
> +	struct libinput *li = dev->libinput;
> +
> +	if (!touchpad_has_palm_detect_size(dev))
> +		return;
> +
> +	enable_edge_scroll(dev);
> +
> +	litest_drain_events(li);
> +
> +	litest_touch_down(dev, 0, 99, 50);
> +	litest_touch_move_to(dev, 0, 99, 50, 99, 70, 5, 0);
> +	litest_touch_up(dev, 0);
> +
> +	litest_assert_only_typed_events(li, LIBINPUT_EVENT_POINTER_AXIS);
> +}
> +END_TEST
> +
>   START_TEST(touchpad_palm_detect_at_bottom_corners)
>   {
>   	struct litest_device *dev = litest_current_device();
> @@ -5232,6 +5252,7 @@ litest_setup_tests(void)
>   	litest_add("touchpad:palm", touchpad_palm_detect_palm_stays_palm, LITEST_TOUCHPAD, LITEST_ANY);
>   	litest_add("touchpad:palm", touchpad_palm_detect_no_palm_moving_into_edges, LITEST_TOUCHPAD, LITEST_ANY);
>   	litest_add("touchpad:palm", touchpad_palm_detect_tap, LITEST_TOUCHPAD, LITEST_ANY);
> +	litest_add("touchpad:palm", touchpad_no_palm_detect_at_edge_for_edge_scrolling, LITEST_TOUCHPAD, LITEST_CLICKPAD);
>
>   	litest_add("touchpad:left-handed", touchpad_left_handed, LITEST_TOUCHPAD|LITEST_BUTTON, LITEST_CLICKPAD);
>   	litest_add("touchpad:left-handed", touchpad_left_handed_clickpad, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD);
>


More information about the wayland-devel mailing list