mirror of
https://github.com/swaywm/sway.git
synced 2024-11-22 07:51:28 +00:00
view: remove foreign toplevel listeners on destroy
This commit is contained in:
parent
f478f4cc66
commit
b7f28cd6b7
|
@ -101,6 +101,7 @@ struct sway_view {
|
||||||
struct wl_listener foreign_activate_request;
|
struct wl_listener foreign_activate_request;
|
||||||
struct wl_listener foreign_fullscreen_request;
|
struct wl_listener foreign_fullscreen_request;
|
||||||
struct wl_listener foreign_close_request;
|
struct wl_listener foreign_close_request;
|
||||||
|
struct wl_listener foreign_destroy;
|
||||||
|
|
||||||
bool destroying;
|
bool destroying;
|
||||||
|
|
||||||
|
|
|
@ -670,6 +670,17 @@ static void handle_foreign_close_request(
|
||||||
view_close(view);
|
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,
|
void view_map(struct sway_view *view, struct wlr_surface *wlr_surface,
|
||||||
bool fullscreen, struct wlr_output *fullscreen_output,
|
bool fullscreen, struct wlr_output *fullscreen_output,
|
||||||
bool decoration) {
|
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;
|
view->foreign_close_request.notify = handle_foreign_close_request;
|
||||||
wl_signal_add(&view->foreign_toplevel->events.request_close,
|
wl_signal_add(&view->foreign_toplevel->events.request_close,
|
||||||
&view->foreign_close_request);
|
&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
|
// 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.
|
// launch it as a tiled view in the root of the workspace instead.
|
||||||
|
|
Loading…
Reference in a new issue