sway

i3-compatible Wayland compositor
git clone https://git.awy.one/sway
Log | Files | Refs | README | LICENSE

commit b7f28cd6b7a421712f3ebb19972e9d501e96be2d
parent f478f4cc6663f9519281f08334f1f27e3182b022
Author: Ronan Pigott <rpigott@berkeley.edu>
Date:   Mon,  3 Aug 2020 12:22:03 -0700

view: remove foreign toplevel listeners on destroy

Diffstat:
Minclude/sway/tree/view.h | 1+
Msway/tree/view.c | 14++++++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/include/sway/tree/view.h b/include/sway/tree/view.h @@ -101,6 +101,7 @@ struct sway_view { struct wl_listener foreign_activate_request; struct wl_listener foreign_fullscreen_request; struct wl_listener foreign_close_request; + struct wl_listener foreign_destroy; bool destroying; diff --git a/sway/tree/view.c b/sway/tree/view.c @@ -670,6 +670,17 @@ static void handle_foreign_close_request( view_close(view); } +static void handle_foreign_destroy( + struct wl_listener *listener, void *data) { + struct sway_view *view = wl_container_of( + listener, view, foreign_destroy); + + wl_list_remove(&view->foreign_activate_request.link); + wl_list_remove(&view->foreign_fullscreen_request.link); + wl_list_remove(&view->foreign_close_request.link); + wl_list_remove(&view->foreign_destroy.link); +} + void view_map(struct sway_view *view, struct wlr_surface *wlr_surface, bool fullscreen, struct wlr_output *fullscreen_output, bool decoration) { @@ -709,6 +720,9 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface, view->foreign_close_request.notify = handle_foreign_close_request; wl_signal_add(&view->foreign_toplevel->events.request_close, &view->foreign_close_request); + view->foreign_destroy.notify = handle_foreign_destroy; + wl_signal_add(&view->foreign_toplevel->events.destroy, + &view->foreign_destroy); // If we're about to launch the view into the floating container, then // launch it as a tiled view in the root of the workspace instead.