diff options
author | Simon Ser <contact@emersion.fr> | 2020-04-14 15:04:56 +0200 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2020-05-01 17:00:14 +0200 |
commit | 5e5e5f2ee54b7139fafe6b55efce0c276c6cc39a (patch) | |
tree | 14ca0e33d908794b2b08f30e2ee4529d75099414 | |
parent | Fix invisible cursor on startup (diff) | |
download | sway-5e5e5f2ee54b7139fafe6b55efce0c276c6cc39a.tar.gz sway-5e5e5f2ee54b7139fafe6b55efce0c276c6cc39a.tar.zst sway-5e5e5f2ee54b7139fafe6b55efce0c276c6cc39a.zip |
Add a secondary headless backend
This allows the create_output command to work on DRM too.
-rw-r--r-- | include/sway/server.h | 2 | ||||
-rw-r--r-- | sway/server.c | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/include/sway/server.h b/include/sway/server.h index a9ffe187..3c972bc5 100644 --- a/include/sway/server.h +++ b/include/sway/server.h | |||
@@ -29,6 +29,8 @@ struct sway_server { | |||
29 | 29 | ||
30 | struct wlr_backend *backend; | 30 | struct wlr_backend *backend; |
31 | struct wlr_backend *noop_backend; | 31 | struct wlr_backend *noop_backend; |
32 | // secondary headless backend used for creating virtual outputs on-the-fly | ||
33 | struct wlr_backend *headless_backend; | ||
32 | 34 | ||
33 | struct wlr_compositor *compositor; | 35 | struct wlr_compositor *compositor; |
34 | struct wl_listener compositor_new_surface; | 36 | struct wl_listener compositor_new_surface; |
diff --git a/sway/server.c b/sway/server.c index 3f658598..ec30430c 100644 --- a/sway/server.c +++ b/sway/server.c | |||
@@ -4,6 +4,8 @@ | |||
4 | #include <stdlib.h> | 4 | #include <stdlib.h> |
5 | #include <wayland-server-core.h> | 5 | #include <wayland-server-core.h> |
6 | #include <wlr/backend.h> | 6 | #include <wlr/backend.h> |
7 | #include <wlr/backend/headless.h> | ||
8 | #include <wlr/backend/multi.h> | ||
7 | #include <wlr/backend/noop.h> | 9 | #include <wlr/backend/noop.h> |
8 | #include <wlr/backend/session.h> | 10 | #include <wlr/backend/session.h> |
9 | #include <wlr/render/wlr_renderer.h> | 11 | #include <wlr/render/wlr_renderer.h> |
@@ -41,7 +43,6 @@ bool server_privileged_prepare(struct sway_server *server) { | |||
41 | server->wl_display = wl_display_create(); | 43 | server->wl_display = wl_display_create(); |
42 | server->wl_event_loop = wl_display_get_event_loop(server->wl_display); | 44 | server->wl_event_loop = wl_display_get_event_loop(server->wl_display); |
43 | server->backend = wlr_backend_autocreate(server->wl_display, NULL); | 45 | server->backend = wlr_backend_autocreate(server->wl_display, NULL); |
44 | server->noop_backend = wlr_noop_backend_create(server->wl_display); | ||
45 | 46 | ||
46 | if (!server->backend) { | 47 | if (!server->backend) { |
47 | sway_log(SWAY_ERROR, "Unable to create backend"); | 48 | sway_log(SWAY_ERROR, "Unable to create backend"); |
@@ -153,9 +154,15 @@ bool server_init(struct sway_server *server) { | |||
153 | return false; | 154 | return false; |
154 | } | 155 | } |
155 | 156 | ||
157 | server->noop_backend = wlr_noop_backend_create(server->wl_display); | ||
158 | |||
156 | struct wlr_output *wlr_output = wlr_noop_add_output(server->noop_backend); | 159 | struct wlr_output *wlr_output = wlr_noop_add_output(server->noop_backend); |
157 | root->noop_output = output_create(wlr_output); | 160 | root->noop_output = output_create(wlr_output); |
158 | 161 | ||
162 | server->headless_backend = | ||
163 | wlr_headless_backend_create_with_renderer(server->wl_display, renderer); | ||
164 | wlr_multi_backend_add(server->backend, server->headless_backend); | ||
165 | |||
159 | // This may have been set already via -Dtxn-timeout | 166 | // This may have been set already via -Dtxn-timeout |
160 | if (!server->txn_timeout_ms) { | 167 | if (!server->txn_timeout_ms) { |
161 | server->txn_timeout_ms = 200; | 168 | server->txn_timeout_ms = 200; |