diff --git a/include/wlr/types/wlr_buffer.h b/include/wlr/types/wlr_buffer.h index 6a49a1bf..d6a98f4b 100644 --- a/include/wlr/types/wlr_buffer.h +++ b/include/wlr/types/wlr_buffer.h @@ -25,6 +25,10 @@ struct wlr_buffer { const struct wlr_buffer_impl *impl; size_t n_refs; + + struct { + struct wl_signal destroy; + } events; }; void wlr_buffer_init(struct wlr_buffer *buffer, diff --git a/types/wlr_buffer.c b/types/wlr_buffer.c index 0cdb3444..3d6ae719 100644 --- a/types/wlr_buffer.c +++ b/types/wlr_buffer.c @@ -4,12 +4,14 @@ #include #include #include +#include "util/signal.h" void wlr_buffer_init(struct wlr_buffer *buffer, const struct wlr_buffer_impl *impl) { assert(impl->destroy); buffer->impl = impl; buffer->n_refs = 1; + wl_signal_init(&buffer->events.destroy); } struct wlr_buffer *wlr_buffer_ref(struct wlr_buffer *buffer) { @@ -28,6 +30,8 @@ void wlr_buffer_unref(struct wlr_buffer *buffer) { return; } + wlr_signal_emit_safe(&buffer->events.destroy, NULL); + buffer->impl->destroy(buffer); }