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

Hans de Goede hdegoede at redhat.com
Thu Sep 18 01:43:09 PDT 2014


Hi,

On 09/18/2014 03:09 AM, Peter Hutterer wrote:
> 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.

I disagree, we have a function for initializing the button areas. We
want to be able to parameterize this function since we don't always
want to have the same size. The standard way to do this is with function
parameters, not by making 2 copies of the function.

> 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.

Hypothetical problems, which are hypothetical. We can worry about this
if it ever really becomes a concern.

Regards,

Hans


> 
> 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