diff --git a/subsurface.c b/subsurface.c index 5c81c62..c759004 100644 --- a/subsurface.c +++ b/subsurface.c @@ -320,6 +320,16 @@ RunSurfaceActions (SurfaceAction *first) static void DestroySubsurface (struct wl_client *client, struct wl_resource *resource) { + Subsurface *subsurface; + + subsurface = wl_resource_get_user_data (resource); + + /* Now detach the role from its surface, which can be reused in the + future. */ + if (subsurface->role.surface) + XLSurfaceReleaseRole (subsurface->role.surface, + &subsurface->role); + wl_resource_destroy (resource); } diff --git a/xdg_surface.c b/xdg_surface.c index 4701381..424259a 100644 --- a/xdg_surface.c +++ b/xdg_surface.c @@ -467,6 +467,11 @@ Destroy (struct wl_client *client, struct wl_resource *resource) return; } + /* Now detach the role from its surface, which can be reused in the + future. */ + if (role->role.surface) + XLSurfaceReleaseRole (role->role.surface, &role->role); + wl_resource_destroy (resource); }