diff --git a/include/labwc.h b/include/labwc.h index deeaa5a9..490c7401 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -445,6 +445,7 @@ void view_update_app_id(struct view *view); void view_impl_map(struct view *view); void view_adjust_size(struct view *view, int *w, int *h); +void view_on_output_destroy(struct view *view); void view_destroy(struct view *view); void foreign_toplevel_handle_create(struct view *view); diff --git a/src/output.c b/src/output.c index 35da0890..d441e734 100644 --- a/src/output.c +++ b/src/output.c @@ -46,6 +46,14 @@ output_destroy_notify(struct wl_listener *listener, void *data) wl_list_remove(&output->link); wl_list_remove(&output->frame.link); wl_list_remove(&output->destroy.link); + + struct view *view; + struct server *server = output->server; + wl_list_for_each(view, &server->views, link) { + if (view->output == output) { + view_on_output_destroy(view); + } + } free(output); } diff --git a/src/view.c b/src/view.c index e50a18bf..a8c63b0e 100644 --- a/src/view.c +++ b/src/view.c @@ -594,6 +594,13 @@ view_discover_output(struct view *view) } } +void +view_on_output_destroy(struct view *view) +{ + view_output_leave(view, view->output->wlr_output); + view->output = NULL; +} + void view_move_to_edge(struct view *view, const char *direction) {