From 0a7a8cbd1c64e50978e846d8cf1bf8b1f6868655 Mon Sep 17 00:00:00 2001 From: emersion Date: Fri, 30 Mar 2018 22:09:06 -0400 Subject: backend/x11: add WLR_X11_OUTPUTS support --- backend/backend.c | 67 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 21 deletions(-) (limited to 'backend/backend.c') diff --git a/backend/backend.c b/backend/backend.c index 52344dac..ff5603bd 100644 --- a/backend/backend.c +++ b/backend/backend.c @@ -61,26 +61,48 @@ struct wlr_renderer *wlr_backend_get_renderer(struct wlr_backend *backend) { return NULL; } +static int parse_outputs_env(const char *name) { + const char *outputs_str = getenv(name); + if (outputs_str == NULL) { + return 1; + } + + char *end; + int outputs = (int)strtol(outputs_str, &end, 10); + if (*end || outputs < 0) { + wlr_log(L_ERROR, "%s specified with invalid integer, ignoring", name); + return 1; + } + + return outputs; +} + static struct wlr_backend *attempt_wl_backend(struct wl_display *display) { struct wlr_backend *backend = wlr_wl_backend_create(display, NULL); - if (backend) { - int outputs = 1; - const char *_outputs = getenv("WLR_WL_OUTPUTS"); - if (_outputs) { - char *end; - outputs = (int)strtol(_outputs, &end, 10); - if (*end) { - wlr_log(L_ERROR, "WLR_WL_OUTPUTS specified with invalid integer, ignoring"); - outputs = 1; - } else if (outputs < 0) { - wlr_log(L_ERROR, "WLR_WL_OUTPUTS specified with negative outputs, ignoring"); - outputs = 1; - } - } - while (outputs--) { - wlr_wl_output_create(backend); - } + if (backend == NULL) { + return NULL; + } + + int outputs = parse_outputs_env("WLR_WL_OUTPUTS"); + for (int i = 0; i < outputs; ++i) { + wlr_wl_output_create(backend); } + + return backend; +} + +static struct wlr_backend *attempt_x11_backend(struct wl_display *display, + const char *x11_display) { + struct wlr_backend *backend = wlr_x11_backend_create(display, x11_display); + if (backend == NULL) { + return NULL; + } + + int outputs = parse_outputs_env("WLR_X11_OUTPUTS"); + for (int i = 0; i < outputs; ++i) { + wlr_x11_output_create(backend); + } + return backend; } @@ -91,7 +113,8 @@ struct wlr_backend *wlr_backend_autocreate(struct wl_display *display) { return NULL; } - if (getenv("WAYLAND_DISPLAY") || getenv("_WAYLAND_DISPLAY")) { + if (getenv("WAYLAND_DISPLAY") || getenv("_WAYLAND_DISPLAY") || + getenv("WAYLAND_SOCKET")) { struct wlr_backend *wl_backend = attempt_wl_backend(display); if (wl_backend) { wlr_multi_backend_add(backend, wl_backend); @@ -103,9 +126,11 @@ struct wlr_backend *wlr_backend_autocreate(struct wl_display *display) { const char *x11_display = getenv("DISPLAY"); if (x11_display) { struct wlr_backend *x11_backend = - wlr_x11_backend_create(display, x11_display); - wlr_multi_backend_add(backend, x11_backend); - return backend; + attempt_x11_backend(display, x11_display); + if (x11_backend) { + wlr_multi_backend_add(backend, x11_backend); + return backend; + } } #endif -- cgit v1.2.3 From 5111f7df84cea46e1e30cc5b460568e5d46e584a Mon Sep 17 00:00:00 2001 From: emersion Date: Fri, 30 Mar 2018 23:36:05 -0400 Subject: backend/x11: fix extra output --- backend/backend.c | 10 +++++----- backend/x11/backend.c | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) (limited to 'backend/backend.c') diff --git a/backend/backend.c b/backend/backend.c index ff5603bd..93d7e0df 100644 --- a/backend/backend.c +++ b/backend/backend.c @@ -61,7 +61,7 @@ struct wlr_renderer *wlr_backend_get_renderer(struct wlr_backend *backend) { return NULL; } -static int parse_outputs_env(const char *name) { +static size_t parse_outputs_env(const char *name) { const char *outputs_str = getenv(name); if (outputs_str == NULL) { return 1; @@ -83,8 +83,8 @@ static struct wlr_backend *attempt_wl_backend(struct wl_display *display) { return NULL; } - int outputs = parse_outputs_env("WLR_WL_OUTPUTS"); - for (int i = 0; i < outputs; ++i) { + size_t outputs = parse_outputs_env("WLR_WL_OUTPUTS"); + for (size_t i = 0; i < outputs; ++i) { wlr_wl_output_create(backend); } @@ -98,8 +98,8 @@ static struct wlr_backend *attempt_x11_backend(struct wl_display *display, return NULL; } - int outputs = parse_outputs_env("WLR_X11_OUTPUTS"); - for (int i = 0; i < outputs; ++i) { + size_t outputs = parse_outputs_env("WLR_X11_OUTPUTS"); + for (size_t i = 0; i < outputs; ++i) { wlr_x11_output_create(backend); } diff --git a/backend/x11/backend.c b/backend/x11/backend.c index 82004058..90658f26 100644 --- a/backend/x11/backend.c +++ b/backend/x11/backend.c @@ -282,7 +282,6 @@ struct wlr_backend *wlr_x11_backend_create(struct wl_display *display, wlr_backend_init(&x11->backend, &backend_impl); x11->wl_display = display; - x11->requested_outputs = 1; wl_list_init(&x11->outputs); x11->xlib_conn = XOpenDisplay(x11_display); -- cgit v1.2.3