From ba921312c538e2857ef1bc9e8a6f3bbb5799cff6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20D=C3=B8rum?= Date: Thu, 15 Oct 2020 14:26:02 +0200 Subject: [PATCH] Fix output-specific images when output reappears When setting an image with `--image :`, the image used to fail to apply if the relevant output appears some time after swaylock executes. Co-authored-by: Alexander Bakker --- include/swaylock.h | 1 + main.c | 13 +++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/include/swaylock.h b/include/swaylock.h index 0eea1b3..c373fff 100644 --- a/include/swaylock.h +++ b/include/swaylock.h @@ -112,6 +112,7 @@ struct swaylock_surface { struct wl_subsurface *subsurface; struct ext_session_lock_surface_v1 *ext_session_lock_surface_v1; struct pool_buffer indicator_buffers[2]; + bool created; bool frame_pending, dirty; uint32_t width, height; int32_t scale; diff --git a/main.c b/main.c index d27cddf..cf072f1 100644 --- a/main.c +++ b/main.c @@ -152,6 +152,8 @@ static void create_surface(struct swaylock_surface *surface) { wl_surface_set_opaque_region(surface->surface, region); wl_region_destroy(region); } + + surface->created = true; } static void ext_session_lock_surface_v1_handle_configure(void *data, @@ -234,7 +236,11 @@ static void handle_wl_output_mode(void *data, struct wl_output *output, } static void handle_wl_output_done(void *data, struct wl_output *output) { - // Who cares + struct swaylock_surface *surface = data; + if (!surface->created && surface->state->run_display) { + create_surface(surface); + wl_display_roundtrip(surface->state->display); + } } static void handle_wl_output_scale(void *data, struct wl_output *output, @@ -310,11 +316,6 @@ static void handle_global(void *data, struct wl_registry *registry, surface->output_global_name = name; wl_output_add_listener(surface->output, &_wl_output_listener, surface); wl_list_insert(&state->surfaces, &surface->link); - - if (state->run_display) { - create_surface(surface); - wl_display_roundtrip(state->display); - } } else if (strcmp(interface, ext_session_lock_manager_v1_interface.name) == 0) { state->ext_session_lock_manager_v1 = wl_registry_bind(registry, name, &ext_session_lock_manager_v1_interface, 1);