aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Simon Ser <contact@emersion.fr>2020-04-14 15:04:56 +0200
committerLibravatar Drew DeVault <sir@cmpwn.com>2020-05-01 17:00:14 +0200
commit5e5e5f2ee54b7139fafe6b55efce0c276c6cc39a (patch)
tree14ca0e33d908794b2b08f30e2ee4529d75099414
parentFix invisible cursor on startup (diff)
downloadsway-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.h2
-rw-r--r--sway/server.c9
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;