diff --git a/libweston/output-capture.c b/libweston/output-capture.c index 3265f063e..f8ec05018 100644 --- a/libweston/output-capture.c +++ b/libweston/output-capture.c @@ -110,6 +110,8 @@ struct weston_capture_task { struct weston_buffer *buffer; struct wl_listener buffer_resource_destroy_listener; + + struct wl_signal destroy_signal; }; /** Buffer requirements broadcasting for a pixel source */ @@ -299,6 +301,8 @@ buffer_is_compatible(struct weston_buffer *buffer, static void weston_capture_task_destroy(struct weston_capture_task *ct) { + wl_signal_emit(&ct->destroy_signal, ct); + if (ct->owner->pixel_source != WESTON_OUTPUT_CAPTURE_SOURCE_WRITEBACK && ct->owner->output) weston_output_disable_planes_decr(ct->owner->output); @@ -345,6 +349,8 @@ weston_capture_task_create(struct weston_capture_source *csrc, if (ct->owner->pixel_source != WESTON_OUTPUT_CAPTURE_SOURCE_WRITEBACK) weston_output_disable_planes_incr(ct->owner->output); + wl_signal_init(&ct->destroy_signal); + return ct; } @@ -698,3 +704,16 @@ weston_compositor_add_screenshot_authority(struct weston_compositor *compositor, listener->notify = (wl_notify_func_t)auth; wl_signal_add(&compositor->output_capture.ask_auth, listener); } + +/* Add a capture task destroy listener + * \param task The capture task + * \listener The listener to call when the task is destroyed + * + * Add a listener for capture task destruction. + */ +WL_EXPORT void +weston_capture_task_add_destroy_listener(struct weston_capture_task *task, + struct wl_listener *listener) +{ + wl_signal_add(&task->destroy_signal, listener); +} diff --git a/libweston/output-capture.h b/libweston/output-capture.h index cb2f4fd6a..b710bf394 100644 --- a/libweston/output-capture.h +++ b/libweston/output-capture.h @@ -89,6 +89,9 @@ weston_capture_task_retire_failed(struct weston_capture_task *ct, void weston_capture_task_retire_complete(struct weston_capture_task *ct); +void +weston_capture_task_add_destroy_listener(struct weston_capture_task *ct, + struct wl_listener *listener); /* * entry point for weston_compositor