xwm: free x11 windows on finish

This commit is contained in:
Dominique Martinet 2017-08-23 23:39:16 +02:00
parent e3143b50b6
commit 4a288fdacb
2 changed files with 10 additions and 3 deletions

View file

@ -134,9 +134,6 @@ static void wlr_xwayland_finish(struct wlr_xwayland *wlr_xwayland) {
wl_event_source_remove(wlr_xwayland->sigusr1_source); wl_event_source_remove(wlr_xwayland->sigusr1_source);
} }
// TODO: destroy all these windows, for now just cleanup
wl_list_init(&wlr_xwayland->displayable_windows);
xwm_destroy(wlr_xwayland->xwm); xwm_destroy(wlr_xwayland->xwm);
safe_close(wlr_xwayland->x_fd[0]); safe_close(wlr_xwayland->x_fd[0]);

View file

@ -310,6 +310,16 @@ void xwm_destroy(struct wlr_xwm *xwm) {
if (xwm->event_source) { if (xwm->event_source) {
wl_event_source_remove(xwm->event_source); wl_event_source_remove(xwm->event_source);
} }
struct wlr_x11_window *window, *tmp;
wl_list_for_each_safe(window, tmp, &xwm->xwayland->displayable_windows, link) {
wlr_x11_window_destroy(window);
}
wl_list_for_each_safe(window, tmp, &xwm->new_windows, link) {
wlr_x11_window_destroy(window);
}
wl_list_for_each_safe(window, tmp, &xwm->unpaired_windows, link) {
wlr_x11_window_destroy(window);
}
wl_list_remove(&xwm->surface_create_listener.link); wl_list_remove(&xwm->surface_create_listener.link);
xcb_disconnect(xwm->xcb_conn); xcb_disconnect(xwm->xcb_conn);