aboutsummaryrefslogtreecommitdiffstats
path: root/sway/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/server.c')
-rw-r--r--sway/server.c44
1 files changed, 26 insertions, 18 deletions
diff --git a/sway/server.c b/sway/server.c
index f5700c09..89dfbf8c 100644
--- a/sway/server.c
+++ b/sway/server.c
@@ -7,13 +7,13 @@
7#include <wlr/backend/session.h> 7#include <wlr/backend/session.h>
8#include <wlr/render/wlr_renderer.h> 8#include <wlr/render/wlr_renderer.h>
9#include <wlr/types/wlr_compositor.h> 9#include <wlr/types/wlr_compositor.h>
10#include <wlr/types/wlr_export_dmabuf_v1.h>
10#include <wlr/types/wlr_gamma_control.h> 11#include <wlr/types/wlr_gamma_control.h>
11#include <wlr/types/wlr_idle.h> 12#include <wlr/types/wlr_idle.h>
12#include <wlr/types/wlr_layer_shell.h> 13#include <wlr/types/wlr_layer_shell.h>
13#include <wlr/types/wlr_linux_dmabuf.h> 14#include <wlr/types/wlr_linux_dmabuf_v1.h>
14#include <wlr/types/wlr_export_dmabuf_v1.h>
15#include <wlr/types/wlr_primary_selection.h> 15#include <wlr/types/wlr_primary_selection.h>
16#include <wlr/types/wlr_screenshooter.h> 16#include <wlr/types/wlr_screencopy_v1.h>
17#include <wlr/types/wlr_server_decoration.h> 17#include <wlr/types/wlr_server_decoration.h>
18#include <wlr/types/wlr_xcursor_manager.h> 18#include <wlr/types/wlr_xcursor_manager.h>
19#include <wlr/types/wlr_xdg_output.h> 19#include <wlr/types/wlr_xdg_output.h>
@@ -21,26 +21,27 @@
21// TODO WLR: make Xwayland optional 21// TODO WLR: make Xwayland optional
22#include "list.h" 22#include "list.h"
23#include "sway/config.h" 23#include "sway/config.h"
24#include "sway/desktop/idle_inhibit_v1.h"
24#include "sway/input/input-manager.h" 25#include "sway/input/input-manager.h"
25#include "sway/server.h" 26#include "sway/server.h"
26#include "sway/tree/layout.h" 27#include "sway/tree/layout.h"
27#include "sway/xwayland.h" 28#include "sway/xwayland.h"
28 29
29bool server_privileged_prepare(struct sway_server *server) { 30bool server_privileged_prepare(struct sway_server *server) {
30 wlr_log(L_DEBUG, "Preparing Wayland server initialization"); 31 wlr_log(WLR_DEBUG, "Preparing Wayland server initialization");
31 server->wl_display = wl_display_create(); 32 server->wl_display = wl_display_create();
32 server->wl_event_loop = wl_display_get_event_loop(server->wl_display); 33 server->wl_event_loop = wl_display_get_event_loop(server->wl_display);
33 server->backend = wlr_backend_autocreate(server->wl_display, NULL); 34 server->backend = wlr_backend_autocreate(server->wl_display, NULL);
34 35
35 if (!server->backend) { 36 if (!server->backend) {
36 wlr_log(L_ERROR, "Unable to create backend"); 37 wlr_log(WLR_ERROR, "Unable to create backend");
37 return false; 38 return false;
38 } 39 }
39 return true; 40 return true;
40} 41}
41 42
42bool server_init(struct sway_server *server) { 43bool server_init(struct sway_server *server) {
43 wlr_log(L_DEBUG, "Initializing Wayland server"); 44 wlr_log(WLR_DEBUG, "Initializing Wayland server");
44 45
45 struct wlr_renderer *renderer = wlr_backend_get_renderer(server->backend); 46 struct wlr_renderer *renderer = wlr_backend_get_renderer(server->backend);
46 assert(renderer); 47 assert(renderer);
@@ -51,8 +52,6 @@ bool server_init(struct sway_server *server) {
51 server->data_device_manager = 52 server->data_device_manager =
52 wlr_data_device_manager_create(server->wl_display); 53 wlr_data_device_manager_create(server->wl_display);
53 54
54 server->idle = wlr_idle_create(server->wl_display);
55 wlr_screenshooter_create(server->wl_display);
56 wlr_gamma_control_manager_create(server->wl_display); 55 wlr_gamma_control_manager_create(server->wl_display);
57 wlr_primary_selection_device_manager_create(server->wl_display); 56 wlr_primary_selection_device_manager_create(server->wl_display);
58 57
@@ -62,6 +61,10 @@ bool server_init(struct sway_server *server) {
62 wlr_xdg_output_manager_create(server->wl_display, 61 wlr_xdg_output_manager_create(server->wl_display,
63 root_container.sway_root->output_layout); 62 root_container.sway_root->output_layout);
64 63
64 server->idle = wlr_idle_create(server->wl_display);
65 server->idle_inhibit_manager_v1 =
66 sway_idle_inhibit_manager_v1_create(server->wl_display, server->idle);
67
65 server->layer_shell = wlr_layer_shell_create(server->wl_display); 68 server->layer_shell = wlr_layer_shell_create(server->wl_display);
66 wl_signal_add(&server->layer_shell->events.new_surface, 69 wl_signal_add(&server->layer_shell->events.new_surface,
67 &server->layer_shell_surface); 70 &server->layer_shell_surface);
@@ -105,12 +108,13 @@ bool server_init(struct sway_server *server) {
105 wlr_server_decoration_manager_set_default_mode( 108 wlr_server_decoration_manager_set_default_mode(
106 deco_manager, WLR_SERVER_DECORATION_MANAGER_MODE_SERVER); 109 deco_manager, WLR_SERVER_DECORATION_MANAGER_MODE_SERVER);
107 110
108 wlr_linux_dmabuf_create(server->wl_display, renderer); 111 wlr_linux_dmabuf_v1_create(server->wl_display, renderer);
109 wlr_export_dmabuf_manager_v1_create(server->wl_display); 112 wlr_export_dmabuf_manager_v1_create(server->wl_display);
113 wlr_screencopy_manager_v1_create(server->wl_display);
110 114
111 server->socket = wl_display_add_socket_auto(server->wl_display); 115 server->socket = wl_display_add_socket_auto(server->wl_display);
112 if (!server->socket) { 116 if (!server->socket) {
113 wlr_log(L_ERROR, "Unable to open wayland socket"); 117 wlr_log(WLR_ERROR, "Unable to open wayland socket");
114 wlr_backend_destroy(server->backend); 118 wlr_backend_destroy(server->backend);
115 return false; 119 return false;
116 } 120 }
@@ -119,8 +123,7 @@ bool server_init(struct sway_server *server) {
119 if (debug != NULL && strcmp(debug, "txn_timings") == 0) { 123 if (debug != NULL && strcmp(debug, "txn_timings") == 0) {
120 server->debug_txn_timings = true; 124 server->debug_txn_timings = true;
121 } 125 }
122 server->destroying_containers = create_list(); 126 server->dirty_containers = create_list();
123
124 server->transactions = create_list(); 127 server->transactions = create_list();
125 128
126 input_manager = input_manager_create(server); 129 input_manager = input_manager_create(server);
@@ -130,18 +133,23 @@ bool server_init(struct sway_server *server) {
130void server_fini(struct sway_server *server) { 133void server_fini(struct sway_server *server) {
131 // TODO: free sway-specific resources 134 // TODO: free sway-specific resources
132 wl_display_destroy(server->wl_display); 135 wl_display_destroy(server->wl_display);
133 list_free(server->destroying_containers); 136 list_free(server->dirty_containers);
134 list_free(server->transactions); 137 list_free(server->transactions);
135} 138}
136 139
137void server_run(struct sway_server *server) { 140bool server_start_backend(struct sway_server *server) {
138 wlr_log(L_INFO, "Running compositor on wayland display '%s'", 141 wlr_log(WLR_INFO, "Starting backend on wayland display '%s'",
139 server->socket); 142 server->socket);
140 setenv("WAYLAND_DISPLAY", server->socket, true);
141 if (!wlr_backend_start(server->backend)) { 143 if (!wlr_backend_start(server->backend)) {
142 wlr_log(L_ERROR, "Failed to start backend"); 144 wlr_log(WLR_ERROR, "Failed to start backend");
143 wlr_backend_destroy(server->backend); 145 wlr_backend_destroy(server->backend);
144 return; 146 return false;
145 } 147 }
148 return true;
149}
150
151void server_run(struct sway_server *server) {
152 wlr_log(WLR_INFO, "Running compositor on wayland display '%s'",
153 server->socket);
146 wl_display_run(server->wl_display); 154 wl_display_run(server->wl_display);
147} 155}