diff --git a/include/main.h b/include/main.h index 2f75895..fd1d43b 100644 --- a/include/main.h +++ b/include/main.h @@ -28,7 +28,13 @@ struct server { struct wlr_renderer *renderer; struct wlr_allocator *alloc; + struct wlr_xdg_shell *xdg_shell; + struct wl_listener new_xdg_surface; + struct wl_list views; + struct wlr_cursor *cursor; + struct wl_listener cursor_motion; + struct wl_listener cursor_button; struct wlr_output_layout *output_layout; struct wl_list outputs; diff --git a/src/main.c b/src/main.c index 6ba2084..21e7282 100644 --- a/src/main.c +++ b/src/main.c @@ -1,5 +1,11 @@ #include "main.h" +void cleanup(struct server *server) { + wlr_backend_destroy(server->backend); + wlr_allocator_destroy(server->alloc); + wl_display_destroy(server->wl_display); +} + void rendermon(struct wl_listener *listener, void *data) { struct output *output = wl_container_of(listener, output, frame); struct server *server = output->server; @@ -39,8 +45,7 @@ void createmon(struct wl_listener *listener, void *data) { struct output *output = malloc(sizeof(struct output)); if (output == NULL) { - wlr_backend_destroy(server->backend); - wl_display_destroy(server->wl_display); + cleanup(server); die("createmon", 1); } @@ -53,7 +58,6 @@ void createmon(struct wl_listener *listener, void *data) { return; } - output->server = server; output->wlr_output = wlr_output; wl_list_insert(&server->outputs, &output->link); @@ -95,8 +99,7 @@ void server_init(struct server *server) { const char *socket = wl_display_add_socket_auto(server->wl_display); if (!socket) { - wlr_backend_destroy(server->backend); - wl_display_destroy(server->wl_display); + cleanup(server); die("wl_display_add_socket_auto", 1); } @@ -104,8 +107,7 @@ void server_init(struct server *server) { setenv("WAYLAND_DISPLAY", socket, 1); if (!wlr_backend_start(server->backend)) { - wlr_backend_destroy(server->backend); - wl_display_destroy(server->wl_display); + cleanup(server); die("wlr_backend_start", 1); } } @@ -124,7 +126,6 @@ int main(void) { server_init(&server); wl_display_run(server.wl_display); - wlr_backend_destroy(server.backend); - wl_display_destroy(server.wl_display); + cleanup(&server); return 0; }