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

Peter Hutterer peter.hutterer at who-t.net
Thu Sep 18 22:44:34 PDT 2014


Hard-coded to 50 devices, because for a debugging tool that's plenty.

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 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);
 
-- 
1.9.3



More information about the wayland-devel mailing list