diff options
Diffstat (limited to 'sway/server.c')
-rw-r--r-- | sway/server.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/sway/server.c b/sway/server.c new file mode 100644 index 00000000..39fa5d28 --- /dev/null +++ b/sway/server.c | |||
@@ -0,0 +1,54 @@ | |||
1 | #define _POSIX_C_SOURCE 200112L | ||
2 | #include <stdlib.h> | ||
3 | #include <stdbool.h> | ||
4 | #include <wayland-server.h> | ||
5 | #include <wlr/backend.h> | ||
6 | #include <wlr/backend/session.h> | ||
7 | #include <wlr/types/wlr_data_device_manager.h> | ||
8 | #include <wlr/render.h> | ||
9 | #include <wlr/render/gles2.h> | ||
10 | // TODO WLR: make Xwayland optional | ||
11 | #include <wlr/xwayland.h> | ||
12 | #include "sway/server.h" | ||
13 | #include "log.h" | ||
14 | |||
15 | bool server_init(struct sway_server *server) { | ||
16 | sway_log(L_DEBUG, "Initializing Wayland server"); | ||
17 | |||
18 | server->wl_display = wl_display_create(); | ||
19 | server->wl_event_loop = wl_display_get_event_loop(server->wl_display); | ||
20 | server->backend = wlr_backend_autocreate(server->wl_display); | ||
21 | |||
22 | server->renderer = wlr_gles2_renderer_create(server->backend); | ||
23 | wl_display_init_shm(server->wl_display); | ||
24 | |||
25 | // TODO WLR | ||
26 | //server->desktop = desktop_create(server, server.config); | ||
27 | //server->input = input_create(&server, server.config); | ||
28 | server->data_device_manager = | ||
29 | wlr_data_device_manager_create(server->wl_display); | ||
30 | |||
31 | const char *socket = wl_display_add_socket_auto(server->wl_display); | ||
32 | if (!socket) { | ||
33 | sway_log_errno(L_ERROR, "Unable to open wayland socket"); | ||
34 | wlr_backend_destroy(server->backend); | ||
35 | return false; | ||
36 | } | ||
37 | |||
38 | sway_log(L_INFO, "Running compositor on wayland display '%s'", socket); | ||
39 | setenv("_WAYLAND_DISPLAY", socket, true); | ||
40 | |||
41 | if (!wlr_backend_start(server->backend)) { | ||
42 | sway_log(L_ERROR, "Failed to start backend"); | ||
43 | wlr_backend_destroy(server->backend); | ||
44 | return false; | ||
45 | } | ||
46 | |||
47 | setenv("WAYLAND_DISPLAY", socket, true); | ||
48 | return true; | ||
49 | } | ||
50 | |||
51 | void server_fini(struct sway_server *server) { | ||
52 | // TODO WLR: tear down more stuff | ||
53 | wlr_backend_destroy(server->backend); | ||
54 | } | ||