From 163f11595f14f7985a1ebeedc7eb16487c410a11 Mon Sep 17 00:00:00 2001 From: Jens Peters Date: Thu, 11 Apr 2024 23:47:10 +0200 Subject: [PATCH] input: remove tablet/pad signal listeners on destroy We should remove those when destroying a tablet or a tablet pad. Also rename 'tablet' to 'pad' in 'tablet_pad' for better readability and consistency. --- src/input/tablet.c | 5 +++++ src/input/tablet_pad.c | 21 ++++++++++++--------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/input/tablet.c b/src/input/tablet.c index b4a18334..e795cdae 100644 --- a/src/input/tablet.c +++ b/src/input/tablet.c @@ -124,6 +124,11 @@ handle_destroy(struct wl_listener *listener, void *data) { struct drawing_tablet *tablet = wl_container_of(listener, tablet, handlers.destroy); + + wl_list_remove(&tablet->handlers.tip.link); + wl_list_remove(&tablet->handlers.button.link); + wl_list_remove(&tablet->handlers.axis.link); + wl_list_remove(&tablet->handlers.destroy.link); free(tablet); } diff --git a/src/input/tablet_pad.c b/src/input/tablet_pad.c index 29cde1e4..5c7c74f1 100644 --- a/src/input/tablet_pad.c +++ b/src/input/tablet_pad.c @@ -27,19 +27,22 @@ handle_button(struct wl_listener *listener, void *data) static void handle_destroy(struct wl_listener *listener, void *data) { - struct drawing_tablet_pad *tablet = - wl_container_of(listener, tablet, handlers.destroy); - free(tablet); + struct drawing_tablet_pad *pad = + wl_container_of(listener, pad, handlers.destroy); + + wl_list_remove(&pad->handlers.button.link); + wl_list_remove(&pad->handlers.destroy.link); + free(pad); } void tablet_pad_init(struct seat *seat, struct wlr_input_device *wlr_device) { wlr_log(WLR_DEBUG, "setting up tablet pad"); - struct drawing_tablet_pad *tablet = znew(*tablet); - tablet->seat = seat; - tablet->tablet = wlr_tablet_pad_from_input_device(wlr_device); - tablet->tablet->data = tablet; - CONNECT_SIGNAL(tablet->tablet, &tablet->handlers, button); - CONNECT_SIGNAL(wlr_device, &tablet->handlers, destroy); + struct drawing_tablet_pad *pad = znew(*pad); + pad->seat = seat; + pad->tablet = wlr_tablet_pad_from_input_device(wlr_device); + pad->tablet->data = pad; + CONNECT_SIGNAL(pad->tablet, &pad->handlers, button); + CONNECT_SIGNAL(wlr_device, &pad->handlers, destroy); } -- 2.52.0