diff --git a/include/wlr/interfaces/wlr_ext_image_capture_source_v1.h b/include/wlr/interfaces/wlr_ext_image_capture_source_v1.h index 8678d3c67..a87e8afd6 100644 --- a/include/wlr/interfaces/wlr_ext_image_capture_source_v1.h +++ b/include/wlr/interfaces/wlr_ext_image_capture_source_v1.h @@ -21,7 +21,7 @@ struct wlr_ext_image_capture_source_v1_interface { // TODO: drop with_cursors flag void (*start)(struct wlr_ext_image_capture_source_v1 *source, bool with_cursors); void (*stop)(struct wlr_ext_image_capture_source_v1 *source); - void (*schedule_frame)(struct wlr_ext_image_capture_source_v1 *source); + void (*request_frame)(struct wlr_ext_image_capture_source_v1 *source, bool schedule_frame); void (*copy_frame)(struct wlr_ext_image_capture_source_v1 *source, struct wlr_ext_image_copy_capture_frame_v1 *dst_frame, struct wlr_ext_image_capture_source_v1_frame_event *frame_event); diff --git a/types/ext_image_capture_source_v1/output.c b/types/ext_image_capture_source_v1/output.c index 1112b64d5..a737b4e58 100644 --- a/types/ext_image_capture_source_v1/output.c +++ b/types/ext_image_capture_source_v1/output.c @@ -70,9 +70,12 @@ static void output_source_stop(struct wlr_ext_image_capture_source_v1 *base) { } } -static void output_source_schedule_frame(struct wlr_ext_image_capture_source_v1 *base) { +static void output_source_request_frame(struct wlr_ext_image_capture_source_v1 *base, + bool schedule_frame) { struct wlr_ext_output_image_capture_source_v1 *source = wl_container_of(base, source, base); - wlr_output_update_needs_frame(source->output); + if (schedule_frame) { + wlr_output_update_needs_frame(source->output); + } } static void output_source_copy_frame(struct wlr_ext_image_capture_source_v1 *base, @@ -99,7 +102,7 @@ static struct wlr_ext_image_capture_source_v1_cursor *output_source_get_pointer_ static const struct wlr_ext_image_capture_source_v1_interface output_source_impl = { .start = output_source_start, .stop = output_source_stop, - .schedule_frame = output_source_schedule_frame, + .request_frame = output_source_request_frame, .copy_frame = output_source_copy_frame, .get_pointer_cursor = output_source_get_pointer_cursor, }; @@ -258,10 +261,13 @@ struct wlr_ext_output_image_capture_source_manager_v1 *wlr_ext_output_image_capt return manager; } -static void output_cursor_source_schedule_frame(struct wlr_ext_image_capture_source_v1 *base) { +static void output_cursor_source_request_frame(struct wlr_ext_image_capture_source_v1 *base, + bool schedule_frame) { struct output_cursor_source *cursor_source = wl_container_of(base, cursor_source, base); - wlr_output_update_needs_frame(cursor_source->output); - cursor_source->needs_frame = true; + if (schedule_frame) { + wlr_output_update_needs_frame(cursor_source->output); + cursor_source->needs_frame = true; + } } static void output_cursor_source_copy_frame(struct wlr_ext_image_capture_source_v1 *base, @@ -288,7 +294,7 @@ static void output_cursor_source_copy_frame(struct wlr_ext_image_capture_source_ } static const struct wlr_ext_image_capture_source_v1_interface output_cursor_source_impl = { - .schedule_frame = output_cursor_source_schedule_frame, + .request_frame = output_cursor_source_request_frame, .copy_frame = output_cursor_source_copy_frame, }; diff --git a/types/ext_image_capture_source_v1/scene.c b/types/ext_image_capture_source_v1/scene.c index b1e46dcad..9f6104be9 100644 --- a/types/ext_image_capture_source_v1/scene.c +++ b/types/ext_image_capture_source_v1/scene.c @@ -128,9 +128,12 @@ static void source_stop(struct wlr_ext_image_capture_source_v1 *base) { wlr_output_state_finish(&state); } -static void source_schedule_frame(struct wlr_ext_image_capture_source_v1 *base) { +static void source_request_frame(struct wlr_ext_image_capture_source_v1 *base, + bool schedule_frame) { struct scene_node_source *source = wl_container_of(base, source, base); - wlr_output_update_needs_frame(&source->output); + if (schedule_frame) { + wlr_output_update_needs_frame(&source->output); + } } static void source_copy_frame(struct wlr_ext_image_capture_source_v1 *base, @@ -149,7 +152,7 @@ static void source_copy_frame(struct wlr_ext_image_capture_source_v1 *base, static const struct wlr_ext_image_capture_source_v1_interface source_impl = { .start = source_start, .stop = source_stop, - .schedule_frame = source_schedule_frame, + .request_frame = source_request_frame, .copy_frame = source_copy_frame, }; diff --git a/types/wlr_ext_image_copy_capture_v1.c b/types/wlr_ext_image_copy_capture_v1.c index c4cfd743e..bc4cdffa2 100644 --- a/types/wlr_ext_image_copy_capture_v1.c +++ b/types/wlr_ext_image_copy_capture_v1.c @@ -281,10 +281,10 @@ static void frame_handle_capture(struct wl_client *client, frame->capturing = true; - bool need_frame = !pixman_region32_empty(&frame->session->damage); + bool schedule_frame = !pixman_region32_empty(&frame->session->damage); struct wlr_ext_image_capture_source_v1 *source = frame->session->source; - if (need_frame && source->impl->schedule_frame) { - source->impl->schedule_frame(source); + if (source->impl->request_frame) { + source->impl->request_frame(source, schedule_frame); } }