Fix reusing subsurfaces and XDG surfaces after roles are destroyed

* subsurface.c (DestroySubsurface):
* xdg_surface.c (Destroy): Release/detach role from surface.
This commit is contained in:
hujianwei 2022-10-23 06:38:04 +00:00
parent ef7f5537f9
commit f83f80abd8
2 changed files with 15 additions and 0 deletions

View file

@ -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);
}

View file

@ -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);
}