From 5717e27c06a89a64b3a168ed22682bf657b17ebf Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sat, 12 Aug 2023 08:24:59 +0200 Subject: [PATCH] output: take wl_display in wlr_output_create_global() Currently wlr_output holds a wl_display, but it will go away soon. Instead of relying on that field in wlr_output_create_global(), make the dependency explicit by taking a wl_display as argument. --- examples/fullscreen-shell.c | 2 +- examples/output-layers.c | 2 +- examples/scene-graph.c | 2 +- include/wlr/types/wlr_output.h | 2 +- types/output/output.c | 4 ++-- types/wlr_output_layout.c | 9 +++++---- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/examples/fullscreen-shell.c b/examples/fullscreen-shell.c index afc3c876..35be46e2 100644 --- a/examples/fullscreen-shell.c +++ b/examples/fullscreen-shell.c @@ -163,7 +163,7 @@ static void server_handle_new_output(struct wl_listener *listener, void *data) { wl_list_insert(&server->outputs, &output->link); wlr_output_layout_add_auto(server->output_layout, wlr_output); - wlr_output_create_global(wlr_output); + wlr_output_create_global(wlr_output, server->wl_display); struct wlr_output_state state; wlr_output_state_init(&state); diff --git a/examples/output-layers.c b/examples/output-layers.c index cec3b50b..c8edc00f 100644 --- a/examples/output-layers.c +++ b/examples/output-layers.c @@ -184,7 +184,7 @@ static void server_handle_new_output(struct wl_listener *listener, void *data) { wlr_output_commit_state(wlr_output, &state); wlr_output_state_finish(&state); - wlr_output_create_global(wlr_output); + wlr_output_create_global(wlr_output, server->wl_display); } static void output_surface_handle_destroy(struct wl_listener *listener, diff --git a/examples/scene-graph.c b/examples/scene-graph.c index 03ad8141..be1070e9 100644 --- a/examples/scene-graph.c +++ b/examples/scene-graph.c @@ -90,7 +90,7 @@ static void server_handle_new_output(struct wl_listener *listener, void *data) { wlr_output_commit_state(wlr_output, &state); wlr_output_state_finish(&state); - wlr_output_create_global(wlr_output); + wlr_output_create_global(wlr_output, server->display); } static void surface_handle_commit(struct wl_listener *listener, void *data) { diff --git a/include/wlr/types/wlr_output.h b/include/wlr/types/wlr_output.h index 47c7672e..e81ba02e 100644 --- a/include/wlr/types/wlr_output.h +++ b/include/wlr/types/wlr_output.h @@ -279,7 +279,7 @@ struct wlr_surface; * wlr_output_commit(). */ void wlr_output_enable(struct wlr_output *output, bool enable); -void wlr_output_create_global(struct wlr_output *output); +void wlr_output_create_global(struct wlr_output *output, struct wl_display *display); void wlr_output_destroy_global(struct wlr_output *output); /** * Initialize the output's rendering subsystem with the provided allocator and diff --git a/types/output/output.c b/types/output/output.c index 08a71d83..ccb36c08 100644 --- a/types/output/output.c +++ b/types/output/output.c @@ -128,11 +128,11 @@ static void output_bind(struct wl_client *wl_client, void *data, wl_signal_emit_mutable(&output->events.bind, &evt); } -void wlr_output_create_global(struct wlr_output *output) { +void wlr_output_create_global(struct wlr_output *output, struct wl_display *display) { if (output->global != NULL) { return; } - output->global = wl_global_create(output->display, + output->global = wl_global_create(display, &wl_output_interface, OUTPUT_VERSION, output, output_bind); if (output->global == NULL) { wlr_log(WLR_ERROR, "Failed to allocate wl_output global"); diff --git a/types/wlr_output_layout.c b/types/wlr_output_layout.c index 94ba779e..fa96e74a 100644 --- a/types/wlr_output_layout.c +++ b/types/wlr_output_layout.c @@ -115,10 +115,11 @@ static void output_layout_reconfigure(struct wlr_output_layout *layout) { wl_signal_emit_mutable(&layout->events.change, layout); } -static void output_update_global(struct wlr_output *output) { +static void output_update_global(struct wlr_output_layout *layout, + struct wlr_output *output) { // Don't expose the output if it doesn't have a current mode if (wl_list_empty(&output->modes) || output->current_mode != NULL) { - wlr_output_create_global(output); + wlr_output_create_global(output, layout->display); } else { wlr_output_destroy_global(output); } @@ -133,7 +134,7 @@ static void handle_output_commit(struct wl_listener *listener, void *data) { WLR_OUTPUT_STATE_TRANSFORM | WLR_OUTPUT_STATE_MODE)) { output_layout_reconfigure(l_output->layout); - output_update_global(l_output->output); + output_update_global(l_output->layout, l_output->output); } } @@ -193,7 +194,7 @@ static struct wlr_output_layout_output *output_layout_add(struct wlr_output_layo l_output->auto_configured = auto_configured; output_layout_reconfigure(layout); - output_update_global(output); + output_update_global(layout, output); if (is_new) { wl_signal_emit_mutable(&layout->events.add, l_output);