Add missing destroy events on automatically destroyed objects

This commit is contained in:
Kirill Primak 2024-11-22 20:37:39 +03:00 committed by Simon Ser
parent 3e651b4642
commit c0d4d7217b
10 changed files with 21 additions and 1 deletions

View file

@ -20,6 +20,8 @@ struct wlr_drm_lease_v1_manager {
struct wl_display *display; struct wl_display *display;
struct { struct {
struct wl_signal destroy;
/** /**
* Upon receiving this signal, call * Upon receiving this signal, call
* wlr_drm_lease_device_v1_grant_lease_request() to grant a lease of the * wlr_drm_lease_device_v1_grant_lease_request() to grant a lease of the

View file

@ -78,6 +78,8 @@ struct wlr_pointer_constraints_v1 {
struct wl_list constraints; // wlr_pointer_constraint_v1.link struct wl_list constraints; // wlr_pointer_constraint_v1.link
struct { struct {
struct wl_signal destroy;
/** /**
* Called when a new pointer constraint is created. * Called when a new pointer constraint is created.
* *

View file

@ -26,6 +26,8 @@ struct wlr_transient_seat_manager_v1 {
struct wl_global *global; struct wl_global *global;
struct { struct {
struct wl_signal destroy;
/** /**
* Upon receiving this signal, call * Upon receiving this signal, call
* wlr_transient_seat_v1_ready() to pass a newly created seat * wlr_transient_seat_v1_ready() to pass a newly created seat

View file

@ -15,6 +15,7 @@ struct wlr_xdg_system_bell_v1 {
struct wl_global *global; struct wl_global *global;
struct { struct {
struct wl_signal destroy;
struct wl_signal ring; // struct wlr_xdg_system_bell_v1_ring_event struct wl_signal ring; // struct wlr_xdg_system_bell_v1_ring_event
} events; } events;

View file

@ -51,6 +51,7 @@ struct wlr_xwayland {
struct wlr_seat *seat; struct wlr_seat *seat;
struct { struct {
struct wl_signal destroy;
struct wl_signal ready; struct wl_signal ready;
struct wl_signal new_surface; // struct wlr_xwayland_surface struct wl_signal new_surface; // struct wlr_xwayland_surface
struct wl_signal remove_startup_info; // struct wlr_xwayland_remove_startup_info_event struct wl_signal remove_startup_info; // struct wlr_xwayland_remove_startup_info_event

View file

@ -682,6 +682,8 @@ static void handle_display_destroy(struct wl_listener *listener, void *data) {
display_destroy); display_destroy);
wlr_log(WLR_DEBUG, "Destroying wlr_drm_lease_v1_manager"); wlr_log(WLR_DEBUG, "Destroying wlr_drm_lease_v1_manager");
wl_signal_emit_mutable(&manager->events.destroy, NULL);
struct wlr_drm_lease_device_v1 *device, *tmp; struct wlr_drm_lease_device_v1 *device, *tmp;
wl_list_for_each_safe(device, tmp, &manager->devices, link) { wl_list_for_each_safe(device, tmp, &manager->devices, link) {
drm_lease_device_v1_destroy(device); drm_lease_device_v1_destroy(device);
@ -718,6 +720,7 @@ struct wlr_drm_lease_v1_manager *wlr_drm_lease_v1_manager_create(
manager->display_destroy.notify = handle_display_destroy; manager->display_destroy.notify = handle_display_destroy;
wl_display_add_destroy_listener(display, &manager->display_destroy); wl_display_add_destroy_listener(display, &manager->display_destroy);
wl_signal_init(&manager->events.destroy);
wl_signal_init(&manager->events.request); wl_signal_init(&manager->events.request);
return manager; return manager;

View file

@ -322,6 +322,7 @@ static void pointer_constraints_bind(struct wl_client *client, void *data,
static void handle_display_destroy(struct wl_listener *listener, void *data) { static void handle_display_destroy(struct wl_listener *listener, void *data) {
struct wlr_pointer_constraints_v1 *pointer_constraints = struct wlr_pointer_constraints_v1 *pointer_constraints =
wl_container_of(listener, pointer_constraints, display_destroy); wl_container_of(listener, pointer_constraints, display_destroy);
wl_signal_emit_mutable(&pointer_constraints->events.destroy, NULL);
wl_list_remove(&pointer_constraints->display_destroy.link); wl_list_remove(&pointer_constraints->display_destroy.link);
wl_global_destroy(pointer_constraints->global); wl_global_destroy(pointer_constraints->global);
free(pointer_constraints); free(pointer_constraints);
@ -345,6 +346,8 @@ struct wlr_pointer_constraints_v1 *wlr_pointer_constraints_v1_create(
pointer_constraints->global = wl_global; pointer_constraints->global = wl_global;
wl_list_init(&pointer_constraints->constraints); wl_list_init(&pointer_constraints->constraints);
wl_signal_init(&pointer_constraints->events.destroy);
wl_signal_init(&pointer_constraints->events.new_constraint); wl_signal_init(&pointer_constraints->events.new_constraint);
pointer_constraints->display_destroy.notify = handle_display_destroy; pointer_constraints->display_destroy.notify = handle_display_destroy;

View file

@ -114,7 +114,7 @@ static const struct ext_transient_seat_manager_v1_interface manager_impl = {
static void handle_display_destroy(struct wl_listener *listener, void *data) { static void handle_display_destroy(struct wl_listener *listener, void *data) {
struct wlr_transient_seat_manager_v1 *manager = struct wlr_transient_seat_manager_v1 *manager =
wl_container_of(listener, manager, display_destroy); wl_container_of(listener, manager, display_destroy);
wl_signal_emit_mutable(&manager->events.destroy, NULL);
wl_list_remove(&manager->display_destroy.link); wl_list_remove(&manager->display_destroy.link);
wl_global_destroy(manager->global); wl_global_destroy(manager->global);
free(manager); free(manager);
@ -154,6 +154,7 @@ struct wlr_transient_seat_manager_v1 *wlr_transient_seat_manager_v1_create(
manager->display_destroy.notify = handle_display_destroy; manager->display_destroy.notify = handle_display_destroy;
wl_display_add_destroy_listener(display, &manager->display_destroy); wl_display_add_destroy_listener(display, &manager->display_destroy);
wl_signal_init(&manager->events.destroy);
wl_signal_init(&manager->events.create_seat); wl_signal_init(&manager->events.create_seat);
return manager; return manager;

View file

@ -51,6 +51,7 @@ static void bell_bind(struct wl_client *client, void *data,
static void handle_display_destroy(struct wl_listener *listener, void *data) { static void handle_display_destroy(struct wl_listener *listener, void *data) {
struct wlr_xdg_system_bell_v1 *bell = wl_container_of(listener, bell, display_destroy); struct wlr_xdg_system_bell_v1 *bell = wl_container_of(listener, bell, display_destroy);
wl_signal_emit_mutable(&bell->events.destroy, NULL);
wl_list_remove(&bell->display_destroy.link); wl_list_remove(&bell->display_destroy.link);
wl_global_destroy(bell->global); wl_global_destroy(bell->global);
free(bell); free(bell);
@ -75,6 +76,7 @@ struct wlr_xdg_system_bell_v1 *wlr_xdg_system_bell_v1_create(struct wl_display *
bell->display_destroy.notify = handle_display_destroy; bell->display_destroy.notify = handle_display_destroy;
wl_display_add_destroy_listener(display, &bell->display_destroy); wl_display_add_destroy_listener(display, &bell->display_destroy);
wl_signal_init(&bell->events.destroy);
wl_signal_init(&bell->events.ring); wl_signal_init(&bell->events.ring);
return bell; return bell;

View file

@ -79,6 +79,8 @@ void wlr_xwayland_destroy(struct wlr_xwayland *xwayland) {
return; return;
} }
wl_signal_emit_mutable(&xwayland->events.destroy, NULL);
wl_list_remove(&xwayland->server_destroy.link); wl_list_remove(&xwayland->server_destroy.link);
wl_list_remove(&xwayland->server_start.link); wl_list_remove(&xwayland->server_start.link);
wl_list_remove(&xwayland->server_ready.link); wl_list_remove(&xwayland->server_ready.link);
@ -105,6 +107,7 @@ struct wlr_xwayland *wlr_xwayland_create_with_server(struct wl_display *wl_displ
xwayland->wl_display = wl_display; xwayland->wl_display = wl_display;
xwayland->compositor = compositor; xwayland->compositor = compositor;
wl_signal_init(&xwayland->events.destroy);
wl_signal_init(&xwayland->events.new_surface); wl_signal_init(&xwayland->events.new_surface);
wl_signal_init(&xwayland->events.ready); wl_signal_init(&xwayland->events.ready);
wl_signal_init(&xwayland->events.remove_startup_info); wl_signal_init(&xwayland->events.remove_startup_info);