backend: allow multiple backends in WLR_BACKENDS

This commit is contained in:
emersion 2018-05-15 22:10:51 +01:00
parent 52bd8aa716
commit 007d83c6ee
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
2 changed files with 36 additions and 13 deletions

View file

@ -1,3 +1,4 @@
#define _POSIX_C_SOURCE 200809L
#include <assert.h>
#include <errno.h>
#include <libinput.h>
@ -138,16 +139,32 @@ struct wlr_backend *wlr_backend_autocreate(struct wl_display *display) {
return NULL;
}
const char *name = getenv("WLR_BACKEND");
if (name) {
struct wlr_backend *subbackend = attempt_backend_by_name(display, name);
if (subbackend) {
wlr_multi_backend_add(backend, subbackend);
return backend;
} else {
wlr_log(L_ERROR, "unrecognized backend '%s'", name);
char *names = getenv("WLR_BACKENDS");
if (names) {
names = strdup(names);
if (names == NULL) {
wlr_log(L_ERROR, "allocation failed");
return NULL;
}
char *saveptr;
char *name = strtok_r(names, ",", &saveptr);
while (name != NULL) {
struct wlr_backend *subbackend =
attempt_backend_by_name(display, name);
if (subbackend == NULL) {
wlr_log(L_ERROR, "unrecognized backend '%s'", name);
return NULL;
}
if (!wlr_multi_backend_add(backend, subbackend)) {
return NULL;
}
name = strtok_r(NULL, ",", &saveptr);
}
return backend;
}
if (getenv("WAYLAND_DISPLAY") || getenv("_WAYLAND_DISPLAY") ||