[PATCH libinput 14/17] evdev: drop the button count when releasing keys on remove

Hans de Goede hdegoede at redhat.com
Sun Sep 14 03:23:06 PDT 2014


Hi,

On 09/03/2014 04:03 AM, Peter Hutterer wrote:
> We previously called this function only before device removal, so failing to
> update the button state didn't matter. To make this function generic for the
> device suspend/resume, we need to keep track of the button/key count properly.
> 
> If we have a key down multiple times on suspend though, log a bug.
> The dispatch should release the keys before we even get here (functionality
> added in a subsequent patch).
> 
> 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/evdev.c | 19 ++++++++++++++-----
>  1 file changed, 14 insertions(+), 5 deletions(-)
> 
> diff --git a/src/evdev.c b/src/evdev.c
> index fad9fd9..88b7c9e 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -1201,20 +1201,29 @@ release_pressed_keys(struct evdev_device *device)
>  		return;
>  
>  	for (code = 0; code < KEY_CNT; code++) {
> -		if (get_key_down_count(device, code) > 0) {
> +		int count = get_key_down_count(device, code);
> +
> +		if (count > 1) {
> +			log_bug_libinput(libinput,
> +					 "Key %d is down %d times.\n",
> +					 code,
> +					 count);
> +		}
> +
> +		while (get_key_down_count(device, code) > 0) {
>  			switch (get_key_type(code)) {
>  			case EVDEV_KEY_TYPE_NONE:
>  				break;
>  			case EVDEV_KEY_TYPE_KEY:
> -				keyboard_notify_key(
> -					&device->base,
> +				evdev_keyboard_notify_key(
> +					device,
>  					time,
>  					code,
>  					LIBINPUT_KEY_STATE_RELEASED);
>  				break;
>  			case EVDEV_KEY_TYPE_BUTTON:
> -				pointer_notify_button(
> -					&device->base,
> +				evdev_pointer_notify_button(
> +					device,
>  					time,
>  					code,
>  					LIBINPUT_BUTTON_STATE_RELEASED);
> 


More information about the wayland-devel mailing list