diff --git a/src/libratbag-private.h b/src/libratbag-private.h index 4ec1de3f..7b55b53d 100644 --- a/src/libratbag-private.h +++ b/src/libratbag-private.h @@ -50,6 +50,7 @@ struct ratbag { struct udev *udev; struct list drivers; + struct list devices; int refcount; ratbag_log_handler log_handler; @@ -74,6 +75,8 @@ struct ratbag_device { unsigned num_buttons; void *drv_data; + + struct list link; }; struct ratbag_id { diff --git a/src/libratbag.c b/src/libratbag.c index 0fb6f49b..f66a8b5c 100644 --- a/src/libratbag.c +++ b/src/libratbag.c @@ -172,6 +172,7 @@ ratbag_device_new(struct ratbag *ratbag, struct udev_device *udev_device, device->ids = *id; list_init(&device->profiles); + list_insert(&ratbag->devices, &device->link); return device; } @@ -196,6 +197,8 @@ ratbag_device_destroy(struct ratbag_device *device) if (device->udev_device) udev_device_unref(device->udev_device); + list_remove(&device->link); + ratbag_unref(device->ratbag); free(device->name); free(device); @@ -488,6 +491,7 @@ ratbag_create_context(const struct ratbag_interface *interface, ratbag->userdata = userdata; list_init(&ratbag->drivers); + list_init(&ratbag->devices); ratbag->udev = udev_new(); if (!ratbag->udev) { free(ratbag);