From a28caf08e364223339814d2d01cd217433d199e2 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Thu, 13 Oct 2022 13:12:43 +0200 Subject: [PATCH] backend: use global output name counters The output names must be globally unique per the Wayland spec, even if the compositor creates multiple backends of the same kind. --- backend/headless/output.c | 9 ++++++--- backend/wayland/output.c | 9 ++++++--- backend/x11/output.c | 9 ++++++--- include/backend/headless.h | 1 - include/backend/wayland.h | 1 - include/backend/x11.h | 1 - 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/backend/headless/output.c b/backend/headless/output.c index 5350747f8..965314d2a 100644 --- a/backend/headless/output.c +++ b/backend/headless/output.c @@ -10,6 +10,8 @@ static const uint32_t SUPPORTED_OUTPUT_STATE = WLR_OUTPUT_STATE_BUFFER | WLR_OUTPUT_STATE_MODE; +static size_t last_output_num = 0; + static struct wlr_headless_output *headless_output_from_output( struct wlr_output *wlr_output) { assert(wlr_output_is_headless(wlr_output)); @@ -116,13 +118,14 @@ struct wlr_output *wlr_headless_add_output(struct wlr_backend *wlr_backend, output_set_custom_mode(output, width, height, 0); + size_t output_num = ++last_output_num; + char name[64]; - snprintf(name, sizeof(name), "HEADLESS-%zu", ++backend->last_output_num); + snprintf(name, sizeof(name), "HEADLESS-%zu", output_num); wlr_output_set_name(wlr_output, name); char description[128]; - snprintf(description, sizeof(description), - "Headless output %zu", backend->last_output_num); + snprintf(description, sizeof(description), "Headless output %zu", output_num); wlr_output_set_description(wlr_output, description); struct wl_event_loop *ev = wl_display_get_event_loop(backend->display); diff --git a/backend/wayland/output.c b/backend/wayland/output.c index f01263b72..ea3c6deaa 100644 --- a/backend/wayland/output.c +++ b/backend/wayland/output.c @@ -32,6 +32,8 @@ static const uint32_t SUPPORTED_OUTPUT_STATE = WLR_OUTPUT_STATE_MODE | WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED; +static size_t last_output_num = 0; + static struct wlr_wl_output *get_wl_output_from_output( struct wlr_output *wlr_output) { assert(wlr_output_is_wl(wlr_output)); @@ -525,13 +527,14 @@ struct wlr_output *wlr_wl_output_create(struct wlr_backend *wlr_backend) { wlr_output->adaptive_sync_status = WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED; + size_t output_num = ++last_output_num; + char name[64]; - snprintf(name, sizeof(name), "WL-%zu", ++backend->last_output_num); + snprintf(name, sizeof(name), "WL-%zu", output_num); wlr_output_set_name(wlr_output, name); char description[128]; - snprintf(description, sizeof(description), - "Wayland output %zu", backend->last_output_num); + snprintf(description, sizeof(description), "Wayland output %zu", output_num); wlr_output_set_description(wlr_output, description); output->backend = backend; diff --git a/backend/x11/output.c b/backend/x11/output.c index 6182258e9..05d53a432 100644 --- a/backend/x11/output.c +++ b/backend/x11/output.c @@ -29,6 +29,8 @@ static const uint32_t SUPPORTED_OUTPUT_STATE = WLR_OUTPUT_STATE_MODE | WLR_OUTPUT_STATE_ADAPTIVE_SYNC_ENABLED; +static size_t last_output_num = 0; + static void parse_xcb_setup(struct wlr_output *output, xcb_connection_t *xcb) { const xcb_setup_t *xcb_setup = xcb_get_setup(xcb); @@ -518,15 +520,16 @@ struct wlr_output *wlr_x11_output_create(struct wlr_backend *backend) { wlr_output_update_custom_mode(wlr_output, 1024, 768, 0); + size_t output_num = ++last_output_num; + char name[64]; - snprintf(name, sizeof(name), "X11-%zu", ++x11->last_output_num); + snprintf(name, sizeof(name), "X11-%zu", output_num); wlr_output_set_name(wlr_output, name); parse_xcb_setup(wlr_output, x11->xcb); char description[128]; - snprintf(description, sizeof(description), - "X11 output %zu", x11->last_output_num); + snprintf(description, sizeof(description), "X11 output %zu", output_num); wlr_output_set_description(wlr_output, description); // The X11 protocol requires us to set a colormap and border pixel if the diff --git a/include/backend/headless.h b/include/backend/headless.h index 047509009..4c71fb608 100644 --- a/include/backend/headless.h +++ b/include/backend/headless.h @@ -10,7 +10,6 @@ struct wlr_headless_backend { struct wlr_backend backend; struct wl_display *display; struct wl_list outputs; - size_t last_output_num; struct wl_listener display_destroy; bool started; }; diff --git a/include/backend/wayland.h b/include/backend/wayland.h index 3a0b13271..c23c0f9a0 100644 --- a/include/backend/wayland.h +++ b/include/backend/wayland.h @@ -25,7 +25,6 @@ struct wlr_wl_backend { int drm_fd; struct wl_list buffers; // wlr_wl_buffer.link size_t requested_outputs; - size_t last_output_num; struct wl_listener local_display_destroy; char *activation_token; diff --git a/include/backend/x11.h b/include/backend/x11.h index 572fce189..e362d5b3e 100644 --- a/include/backend/x11.h +++ b/include/backend/x11.h @@ -74,7 +74,6 @@ struct wlr_x11_backend { uint32_t dri3_major_version, dri3_minor_version; size_t requested_outputs; - size_t last_output_num; struct wl_list outputs; // wlr_x11_output::link struct wlr_keyboard keyboard;