diff --git a/include/sway/server.h b/include/sway/server.h index a9ffe187a..3c972bc56 100644 --- a/include/sway/server.h +++ b/include/sway/server.h @@ -29,6 +29,8 @@ struct sway_server { struct wlr_backend *backend; struct wlr_backend *noop_backend; + // secondary headless backend used for creating virtual outputs on-the-fly + struct wlr_backend *headless_backend; struct wlr_compositor *compositor; struct wl_listener compositor_new_surface; diff --git a/sway/server.c b/sway/server.c index 3f658598b..ec30430c1 100644 --- a/sway/server.c +++ b/sway/server.c @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include #include #include @@ -41,7 +43,6 @@ bool server_privileged_prepare(struct sway_server *server) { server->wl_display = wl_display_create(); server->wl_event_loop = wl_display_get_event_loop(server->wl_display); server->backend = wlr_backend_autocreate(server->wl_display, NULL); - server->noop_backend = wlr_noop_backend_create(server->wl_display); if (!server->backend) { sway_log(SWAY_ERROR, "Unable to create backend"); @@ -153,9 +154,15 @@ bool server_init(struct sway_server *server) { return false; } + server->noop_backend = wlr_noop_backend_create(server->wl_display); + struct wlr_output *wlr_output = wlr_noop_add_output(server->noop_backend); root->noop_output = output_create(wlr_output); + server->headless_backend = + wlr_headless_backend_create_with_renderer(server->wl_display, renderer); + wlr_multi_backend_add(server->backend, server->headless_backend); + // This may have been set already via -Dtxn-timeout if (!server->txn_timeout_ms) { server->txn_timeout_ms = 200;