Implement destroying surfaces

Add a signal for wlr_surface destruction on the wlr_surface that compositors
can listen to to remove the surface from their state.

Implement a listener for this in the example wl_compositor to remove the
surface from its internal list of surfaces.

Destroy the surface in the compositor destroy_surface callback given when the
surface resource was created.

Add a reference to the surface resource to the wlr_surface so a compositor can
find it in its list of resources upon wlr_resource destruction.
This commit is contained in:
Tony Crisci 2017-08-04 11:53:55 -04:00
parent 6610aa7ca7
commit effea557bb
4 changed files with 30 additions and 1 deletions

View file

@ -84,6 +84,7 @@ static void gles2_surface_bind(struct wlr_surface_state *surface) {
}
static void gles2_surface_destroy(struct wlr_surface_state *surface) {
wl_signal_emit(&surface->wlr_surface->destroy_signal, surface->wlr_surface);
GL_CALL(glDeleteTextures(1, &surface->tex_id));
free(surface);
}
@ -100,5 +101,6 @@ struct wlr_surface *gles2_surface_init() {
struct wlr_surface_state *state = calloc(sizeof(struct wlr_surface_state), 1);
struct wlr_surface *surface = wlr_surface_init(state, &wlr_surface_impl);
state->wlr_surface = surface;
wl_signal_init(&surface->destroy_signal);
return surface;
}