From 5f412e825c139ad8e773410806a3cffa1c2999e4 Mon Sep 17 00:00:00 2001 From: Rakarake Date: Sat, 27 Dec 2025 01:14:00 +0100 Subject: [PATCH] layer shell working --- wayland.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/wayland.c b/wayland.c index 8d06d9c..eaf0e81 100644 --- a/wayland.c +++ b/wayland.c @@ -59,6 +59,7 @@ static void zwlr_layer_surface_v1_configure(void *data, struct zwlr_layer_surfac state->width = width; state->height = height; wl_egl_window_resize(state->egl_window, width, height, 0, 0); + zwlr_layer_surface_v1_ack_configure(zwlr_layer_surface_v1, serial); } static const struct zwlr_layer_surface_v1_listener zwlr_layer_surface_v1_listener = { @@ -98,8 +99,6 @@ static void registry_handle_global( } if ((strcmp(interface, zwlr_layer_shell_v1_interface.name) == 0) && (state->output_type == OUTPUT_LAYER)) { state->zwlr_layer_shell_v1 = wl_registry_bind(registry, name, &zwlr_layer_shell_v1_interface, 4); - int layer = ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND; - state->zwlr_layer_surface_v1 = zwlr_layer_shell_v1_get_layer_surface(state->zwlr_layer_shell_v1, state->wl_surface, NULL, layer, "wallpaper"); } if (strcmp(interface, wl_output_interface.name) == 0) { state->wl_output = wl_registry_bind( @@ -215,13 +214,21 @@ void wayland_init(struct client_state *state, int output_type) { state->output_type = output_type; state->wl_display = wl_display_connect(NULL); state->wl_registry = wl_display_get_registry(state->wl_display); + state->wl_output = NULL; wl_registry_add_listener(state->wl_registry, &wl_registry_listener, state); wl_display_roundtrip(state->wl_display); - // wlr_layer_shell - //int layer = ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND; - //struct zwlr_layer_surface_v1 *zwlr_layer_surface = zwlr_layer_shell_v1_get_layer_surface(state->zwlr_layer_shell_v1, state->wl_surface, state->wl_output, layer, "wallpaper"); - // toplevel + if (output_type == OUTPUT_LAYER) { + // wlr_layer_shell + int layer = ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND; + state->zwlr_layer_surface_v1 = zwlr_layer_shell_v1_get_layer_surface(state->zwlr_layer_shell_v1, state->wl_surface, state->wl_output, layer, "wallpaper"); + zwlr_layer_surface_v1_set_anchor(state->zwlr_layer_surface_v1, + ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM | ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP + | ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT); + zwlr_layer_surface_v1_set_size(state->zwlr_layer_surface_v1, 0, 0); + zwlr_layer_surface_v1_add_listener(state->zwlr_layer_surface_v1, &zwlr_layer_surface_v1_listener, state); + } + wl_surface_commit(state->wl_surface); egl_init(state);