[PATCH libinput 1/3] touchpad: Enlarge topbutton area a bit while the touchpad is disabled

Peter Hutterer peter.hutterer at who-t.net
Wed Sep 17 18:09:32 PDT 2014


On Wed, Sep 17, 2014 at 03:35:30PM +0200, Hans de Goede wrote:
> Make it easier to hit the topbutton area when the touchpad is disabled,
> normally we don't want to make the topbutton area too big, so as to not
> interfere with normal touchpad operation, but when disabled we have no such
> worries.

even though it may not seem like the scalable solution, I'd really prefer
this to be two functions, "expand" and "normal" or so. We don't need a
generic multiplier here (we don't plan to add more than 2 sizes) and
something like tp_expand_softbuttons(tp, device) or 
tp_set_softbutton_size_large(tp, device) is easier to comprehend IMO
than adding the raw numbers as multipliers of some magic size.

Plus, we may end up having some magic number being the best size 
that's not a straightforward multiplier in which case the multiplier just
adds to the confusion. So let's just use two sizes, normal and large and go
with those.

Cheers,
   Peter

> 
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
>  src/evdev-mt-touchpad-buttons.c | 19 ++++++++++++-------
>  src/evdev-mt-touchpad.c         |  4 ++++
>  src/evdev-mt-touchpad.h         |  4 +++-
>  3 files changed, 19 insertions(+), 8 deletions(-)
> 
> diff --git a/src/evdev-mt-touchpad-buttons.c b/src/evdev-mt-touchpad-buttons.c
> index 865346b..f0800d7 100644
> --- a/src/evdev-mt-touchpad-buttons.c
> +++ b/src/evdev-mt-touchpad-buttons.c
> @@ -496,7 +496,8 @@ tp_release_all_buttons(struct tp_dispatch *tp,
>  
>  void
>  tp_init_softbuttons(struct tp_dispatch *tp,
> -		    struct evdev_device *device)
> +		    struct evdev_device *device,
> +		    double topbutton_size_mult)
>  {
>  	int width, height;
>  	const struct input_absinfo *absinfo_x, *absinfo_y;
> @@ -524,14 +525,18 @@ tp_init_softbuttons(struct tp_dispatch *tp,
>  	tp->buttons.bottom_area.rightbutton_left_edge = width/2 + xoffset;
>  
>  	if (tp->buttons.has_topbuttons) {
> -		/* T440s has the top button line 5mm from the top,
> -		   event analysis has shown events to start down to ~10mm
> -		   from the top - which maps to 15% */
> +		/* T440s has the top button line 5mm from the top, event
> +		   analysis has shown events to start down to ~10mm from the
> +		   top - which maps to 15%.  We allow the caller to enlarge the
> +		   area using a multiplier for the touchpad disabled case. */
> +		double topsize_mm = 10 * topbutton_size_mult;
> +		double topsize_pct = .15 * topbutton_size_mult;
> +
>  		if (yres > 1) {
>  			tp->buttons.top_area.bottom_edge =
> -			yoffset + 10 * yres;
> +			yoffset + topsize_mm * yres;
>  		} else {
> -			tp->buttons.top_area.bottom_edge = height * .15 + yoffset;
> +			tp->buttons.top_area.bottom_edge = height * topsize_pct + yoffset;
>  		}
>  		tp->buttons.top_area.rightbutton_left_edge = width * .58 + xoffset;
>  		tp->buttons.top_area.leftbutton_right_edge = width * .42 + xoffset;
> @@ -581,7 +586,7 @@ tp_init_buttons(struct tp_dispatch *tp,
>  		tp->buttons.use_clickfinger = true;
>  
>  	if (tp->buttons.is_clickpad && !tp->buttons.use_clickfinger) {
> -		tp_init_softbuttons(tp, device);
> +		tp_init_softbuttons(tp, device, 1.0);
>  	} else {
>  		tp->buttons.bottom_area.top_edge = INT_MAX;
>  		tp->buttons.top_area.bottom_edge = INT_MIN;
> diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
> index 9e568ad..1c32cc6 100644
> --- a/src/evdev-mt-touchpad.c
> +++ b/src/evdev-mt-touchpad.c
> @@ -645,6 +645,8 @@ tp_suspend(struct tp_dispatch *tp, struct evdev_device *device)
>  	 */
>  	if (tp->buttons.has_topbuttons) {
>  		evdev_notify_suspended_device(device);
> +		/* Enlarge topbutton area while suspended */
> +		tp_init_softbuttons(tp, device, 1.5);
>  	} else {
>  		evdev_device_suspend(device);
>  	}
> @@ -656,6 +658,8 @@ tp_resume(struct tp_dispatch *tp, struct evdev_device *device)
>  	if (tp->buttons.has_topbuttons) {
>  		/* tap state-machine is offline while suspended, reset state */
>  		tp_clear_state(tp, device);
> +		/* restore original topbutton area size */
> +		tp_init_softbuttons(tp, device, 1.0);
>  		evdev_notify_resumed_device(device);
>  	} else {
>  		evdev_device_resume(device);
> diff --git a/src/evdev-mt-touchpad.h b/src/evdev-mt-touchpad.h
> index 15cca76..e0c8c47 100644
> --- a/src/evdev-mt-touchpad.h
> +++ b/src/evdev-mt-touchpad.h
> @@ -245,7 +245,9 @@ int
>  tp_init_buttons(struct tp_dispatch *tp, struct evdev_device *device);
>  
>  void
> -tp_init_softbuttons(struct tp_dispatch *tp, struct evdev_device *device);
> +tp_init_softbuttons(struct tp_dispatch *tp,
> +		    struct evdev_device *device,
> +		    double topbutton_size_mult);
>  
>  void
>  tp_destroy_buttons(struct tp_dispatch *tp);
> -- 
> 2.1.0
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
> 


More information about the wayland-devel mailing list