Merge branch 'output-layers-unmapped' into 'master'

output-layers: change semantics of wlr_output_state.layers

See merge request wlroots/wlroots!4195
This commit is contained in:
Simon Ser 2026-01-11 05:55:29 +00:00
commit a860e5513e
8 changed files with 121 additions and 71 deletions

View file

@ -684,12 +684,14 @@ static bool output_basic_test(struct wlr_output *output,
}
if (state->committed & WLR_OUTPUT_STATE_LAYERS) {
if (state->layers_len != (size_t)wl_list_length(&output->layers)) {
wlr_log(WLR_DEBUG, "All output layers must be specified in wlr_output_state.layers");
return false;
}
for (size_t i = 0; i < state->layers_len; i++) {
assert(state->layers[i].layer != NULL);
if (state->layers[i].buffer == NULL) {
wlr_log(WLR_DEBUG, "All output layer states must have a buffer");
return false;
}
state->layers[i].accepted = false;
}
}

View file

@ -1,6 +1,8 @@
#include <assert.h>
#include <stdlib.h>
#include <wlr/interfaces/wlr_output.h>
#include <wlr/types/wlr_output_layer.h>
#include <wlr/util/log.h>
struct wlr_output_layer *wlr_output_layer_create(struct wlr_output *output) {
struct wlr_output_layer *layer = calloc(1, sizeof(*layer));
@ -28,3 +30,16 @@ void wlr_output_layer_destroy(struct wlr_output_layer *layer) {
wl_list_remove(&layer->link);
free(layer);
}
bool wlr_output_state_is_layer_enabled(const struct wlr_output_state *state,
struct wlr_output_layer *layer) {
assert(state->committed & WLR_OUTPUT_STATE_LAYERS);
for (size_t i = 0; i < state->layers_len; i++) {
if (state->layers[i].layer == layer) {
return true;
}
}
return false;
}