[PATCH libinput 09/10] tools: keep a list of devices around for run-time changes

Hans de Goede hdegoede at redhat.com
Fri Sep 19 00:19:56 PDT 2014


Hi,

On 09/19/2014 07:44 AM, Peter Hutterer wrote:
> Hard-coded to 50 devices, because for a debugging tool that's plenty.
> 
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

This patch and 10/10 look good and are:

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

Regards,

Hans

> ---
>  tools/event-gui.c | 36 ++++++++++++++++++++++++++++++++++++
>  1 file changed, 36 insertions(+)
> 
> diff --git a/tools/event-gui.c b/tools/event-gui.c
> index 3ef3005..fcae236 100644
> --- a/tools/event-gui.c
> +++ b/tools/event-gui.c
> @@ -67,6 +67,8 @@ struct window {
>  
>  	/* l/m/r mouse buttons */
>  	int l, m, r;
> +
> +	struct libinput_device *devices[50];
>  };
>  
>  static int
> @@ -212,10 +214,23 @@ window_init(struct window *w)
>  }
>  
>  static void
> +window_cleanup(struct window *w)
> +{
> +	struct libinput_device **dev;
> +	ARRAY_FOR_EACH(w->devices, dev) {
> +		if (*dev)
> +			libinput_device_unref(*dev);
> +	}
> +}
> +
> +static void
>  handle_event_device_notify(struct libinput_event *ev)
>  {
>  	struct libinput_device *dev = libinput_event_get_device(ev);
> +	struct libinput *li;
> +	struct window *w;
>  	const char *type;
> +	int i;
>  
>  	if (libinput_event_get_type(ev) == LIBINPUT_EVENT_DEVICE_ADDED)
>  		type = "added";
> @@ -232,6 +247,26 @@ handle_event_device_notify(struct libinput_event *ev)
>  			error("%s: Failed to enable tapping\n",
>  			      libinput_device_get_sysname(dev));
>  	}
> +
> +	li = libinput_event_get_context(ev);
> +	w = libinput_get_user_data(li);
> +
> +	if (libinput_event_get_type(ev) == LIBINPUT_EVENT_DEVICE_ADDED) {
> +		for (i = 0; i < ARRAY_LENGTH(w->devices); i++) {
> +			if (w->devices[i] == NULL) {
> +				w->devices[i] = libinput_device_ref(dev);
> +				break;
> +			}
> +		}
> +	} else  {
> +		for (i = 0; i < ARRAY_LENGTH(w->devices); i++) {
> +			if (w->devices[i] == dev) {
> +				libinput_device_unref(w->devices[i]);
> +				w->devices[i] = NULL;
> +				break;
> +			}
> +		}
> +	}
>  }
>  
>  static void
> @@ -474,6 +509,7 @@ main(int argc, char *argv[])
>  
>  	gtk_main();
>  
> +	window_cleanup(&w);
>  	libinput_unref(li);
>  	udev_unref(udev);
>  
> 


More information about the wayland-devel mailing list