output-layers: change semantics of wlr_output_state.layers

Previously, we were requiring all layers to be included in
wlr_output_state.layers and wlr_output_layer_state.buffer to be
set to NULL to disable a layer.

This commit changes these semantics: disabled layers are left out
of wlr_output_state.layers, and wlr_output_layer_state.buffer is
required to be non-NULL.

This new API should make it easier for callers to populate the
layers, at the cost of some additional complexity in backends,
mostly addressed by introducing a new
wlr_output_state_is_layer_enabled() helper.
This commit is contained in:
Simon Ser 2023-06-12 17:15:16 +02:00
parent f42920c414
commit b931ac9ac0
8 changed files with 120 additions and 71 deletions

View file

@ -664,13 +664,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;
}
}