diff --git a/src/backend/wayland/wl_input_fwd.c b/src/backend/wayland/wl_input_fwd.c index 61de948..3836cb2 100644 --- a/src/backend/wayland/wl_input_fwd.c +++ b/src/backend/wayland/wl_input_fwd.c @@ -17,16 +17,16 @@ void handle_pointer_button(struct wl_listener *listener, void *data); void handle_pointer_frame(struct wl_listener *listener, void *data); void handle_pointer_axis(struct wl_listener *listener, void *data); +#define INPUT_LISTENER_REMOVE(l) \ + do { if ((l).link.next) { wl_list_remove(&(l).link); wl_list_init(&(l).link); } } while (0) + static void handle_keyboard_destroy(struct wl_listener *listener, void *data) { (void)listener; (void)data; - wl_list_remove(&wl_state.real_keyboard_key_listener.link); - wl_list_remove(&wl_state.real_keyboard_modifiers_listener.link); - wl_list_remove(&wl_state.real_keyboard_destroy_listener.link); - wl_list_init(&wl_state.real_keyboard_key_listener.link); - wl_list_init(&wl_state.real_keyboard_modifiers_listener.link); - wl_list_init(&wl_state.real_keyboard_destroy_listener.link); + INPUT_LISTENER_REMOVE(wl_state.real_keyboard_key_listener); + INPUT_LISTENER_REMOVE(wl_state.real_keyboard_modifiers_listener); + INPUT_LISTENER_REMOVE(wl_state.real_keyboard_destroy_listener); wl_state.real_keyboard_dev = NULL; wl_state.keyboard_dev = NULL; } @@ -35,18 +35,12 @@ static void handle_pointer_destroy(struct wl_listener *listener, void *data) { (void)listener; (void)data; - wl_list_remove(&wl_state.pointer_motion_listener.link); - wl_list_remove(&wl_state.real_pointer_motion_abs_listener.link); - wl_list_remove(&wl_state.real_pointer_button_listener.link); - wl_list_remove(&wl_state.real_pointer_frame_listener.link); - wl_list_remove(&wl_state.real_pointer_axis_listener.link); - wl_list_remove(&wl_state.real_pointer_destroy_listener.link); - wl_list_init(&wl_state.pointer_motion_listener.link); - wl_list_init(&wl_state.real_pointer_motion_abs_listener.link); - wl_list_init(&wl_state.real_pointer_button_listener.link); - wl_list_init(&wl_state.real_pointer_frame_listener.link); - wl_list_init(&wl_state.real_pointer_axis_listener.link); - wl_list_init(&wl_state.real_pointer_destroy_listener.link); + INPUT_LISTENER_REMOVE(wl_state.pointer_motion_listener); + INPUT_LISTENER_REMOVE(wl_state.real_pointer_motion_abs_listener); + INPUT_LISTENER_REMOVE(wl_state.real_pointer_button_listener); + INPUT_LISTENER_REMOVE(wl_state.real_pointer_frame_listener); + INPUT_LISTENER_REMOVE(wl_state.real_pointer_axis_listener); + INPUT_LISTENER_REMOVE(wl_state.real_pointer_destroy_listener); wl_state.real_pointer_dev = NULL; wl_state.pointer_dev = NULL; }