screencopy-v1: fail concurrent capture_output requests

Send the failed event immediately when a client sends capture_output
or capture_output_region for an output that already has a live frame
owned by that client.

Enforces one frame per (client, output) pair, matching ext-image-copy-
capture-v1's create_frame restriction without adding a new error code
or bumping the interface version.
This commit is contained in:
Jaeyong Lee 2026-05-28 22:03:58 +09:00 committed by Félix Poisot
parent a94cd29eb1
commit fc1cc7656a

View file

@ -512,6 +512,16 @@ static void capture_output(struct wl_client *wl_client,
return;
}
struct wlr_screencopy_frame_v1 *existing;
wl_list_for_each(existing, &client->manager->frames, link) {
if (existing->client == client && existing->output == output) {
wl_resource_set_user_data(frame->resource, NULL);
zwlr_screencopy_frame_v1_send_failed(frame->resource);
free(frame);
return;
}
}
frame->client = client;
client->ref++;