wl_client_flush(wxs->client);
close(sv[1]);
+ /* xcb_connect_to_fd takes ownership of the fd. */
wm->conn = xcb_connect_to_fd(sv[0], NULL);
if (xcb_connection_has_error(wm->conn)) {
fprintf(stderr, "xcb_connect_to_fd failed\n");
}
static void
+wlsc_wm_destroy(struct wlsc_wm *wm)
+{
+ /* FIXME: Free windows in hash. */
+ wl_hash_table_destroy(wm->window_hash);
+ xcb_disconnect(wm->conn);
+ wl_event_source_remove(wm->source);
+ free(wm);
+}
+
+static void
wlsc_xserver_bind(struct wl_client *client,
struct wl_object *global,
uint32_t version)
wl_event_loop_add_fd(mxs->loop, mxs->unix_fd,
WL_EVENT_READABLE,
wlsc_xserver_handle_event, mxs);
+
+ wlsc_wm_destroy(mxs->wm);
+ mxs->wm = NULL;
}
static void