summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2014-07-04 08:56:44 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2014-09-23 10:46:40 +1000
commit3b0c97c78baa08d592fd4e6452dcee3a54a3ce68 (patch)
tree27292a9d1ff02fb2fdd27c0ffc48983254b04671 /tools
parent1dfb248ab95cf90452c6df22f114f5d0a29cd35f (diff)
downloadlibinput-3b0c97c78baa08d592fd4e6452dcee3a54a3ce68.tar.gz
tools: keep a list of devices around for run-time changes
Hard-coded to 50 devices, because for a debugging tool that's plenty. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/event-gui.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/tools/event-gui.c b/tools/event-gui.c
index 3ef30057..fcae236c 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);