diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2014-07-04 08:56:44 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2014-09-23 10:46:40 +1000 |
commit | 3b0c97c78baa08d592fd4e6452dcee3a54a3ce68 (patch) | |
tree | 27292a9d1ff02fb2fdd27c0ffc48983254b04671 /tools | |
parent | 1dfb248ab95cf90452c6df22f114f5d0a29cd35f (diff) | |
download | libinput-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.c | 36 |
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); |