diff --git a/backend/libinput/tablet_pad.c b/backend/libinput/tablet_pad.c index b053b9a0..691bb185 100644 --- a/backend/libinput/tablet_pad.c +++ b/backend/libinput/tablet_pad.c @@ -75,6 +75,7 @@ struct wlr_tablet_pad *create_libinput_tablet_pad( wlr_log(WLR_ERROR, "Unable to allocate wlr_tablet_pad"); return NULL; } + wlr_tablet_pad_init(wlr_tablet_pad, NULL); wlr_tablet_pad->button_count = libinput_device_tablet_pad_get_num_buttons(libinput_dev); @@ -83,17 +84,14 @@ struct wlr_tablet_pad *create_libinput_tablet_pad( wlr_tablet_pad->strip_count = libinput_device_tablet_pad_get_num_strips(libinput_dev); - wlr_list_init(&wlr_tablet_pad->paths); struct udev_device *udev = libinput_device_get_udev_device(libinput_dev); wlr_list_push(&wlr_tablet_pad->paths, strdup(udev_device_get_syspath(udev))); - wl_list_init(&wlr_tablet_pad->groups); int groups = libinput_device_tablet_pad_get_num_mode_groups(libinput_dev); for (int i = 0; i < groups; ++i) { add_pad_group_from_libinput(wlr_tablet_pad, libinput_dev, i); } - wlr_tablet_pad_init(wlr_tablet_pad, NULL); return wlr_tablet_pad; } diff --git a/types/tablet_v2/wlr_tablet_v2_pad.c b/types/tablet_v2/wlr_tablet_v2_pad.c index d7cd5e3e..515d1fbb 100644 --- a/types/tablet_v2/wlr_tablet_v2_pad.c +++ b/types/tablet_v2/wlr_tablet_v2_pad.c @@ -462,8 +462,10 @@ uint32_t wlr_send_tablet_v2_tablet_pad_enter( uint32_t time = now.tv_nsec / 1000; for (size_t i = 0; i < pad->group_count; ++i) { - zwp_tablet_pad_group_v2_send_mode_switch( - pad_client->groups[i], time, serial, pad->groups[i]); + if (pad_client->groups[i]) { + zwp_tablet_pad_group_v2_send_mode_switch( + pad_client->groups[i], time, serial, pad->groups[i]); + } } return serial; diff --git a/types/wlr_tablet_pad.c b/types/wlr_tablet_pad.c index 71421e72..aa0111fe 100644 --- a/types/wlr_tablet_pad.c +++ b/types/wlr_tablet_pad.c @@ -11,6 +11,9 @@ void wlr_tablet_pad_init(struct wlr_tablet_pad *pad, wl_signal_init(&pad->events.ring); wl_signal_init(&pad->events.strip); wl_signal_init(&pad->events.attach_tablet); + + wl_list_init(&pad->groups); + wlr_list_init(&pad->paths); } void wlr_tablet_pad_destroy(struct wlr_tablet_pad *pad) {