From e00c4cd7dc14862503513dc029aa4d3db1d70865 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 21 Feb 2023 09:12:49 +0100 Subject: [PATCH] output-layer: cache current state The will be used by the Wayland backend to figure out whether updating sub-surface position is necessary. --- include/wlr/types/wlr_output_layer.h | 4 ++++ types/output/output.c | 10 ++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/include/wlr/types/wlr_output_layer.h b/include/wlr/types/wlr_output_layer.h index 1ba69c8f6..72dc43d55 100644 --- a/include/wlr/types/wlr_output_layer.h +++ b/include/wlr/types/wlr_output_layer.h @@ -48,6 +48,10 @@ struct wlr_output_layer { } events; void *data; + + // private state + + int x, y; }; /** diff --git a/types/output/output.c b/types/output/output.c index 6d331b930..b39f197c9 100644 --- a/types/output/output.c +++ b/types/output/output.c @@ -842,11 +842,17 @@ bool wlr_output_commit_state(struct wlr_output *output, } if (pending.committed & WLR_OUTPUT_STATE_LAYERS) { - // Commit layer ordering for (size_t i = 0; i < pending.layers_len; i++) { - struct wlr_output_layer *layer = pending.layers[i].layer; + struct wlr_output_layer_state *layer_state = &pending.layers[i]; + struct wlr_output_layer *layer = layer_state->layer; + + // Commit layer ordering wl_list_remove(&layer->link); wl_list_insert(output->layers.prev, &layer->link); + + // Commit layer state + layer->x = layer_state->x; + layer->y = layer_state->y; } }