diff --git a/include/wlr/types/wlr_surface.h b/include/wlr/types/wlr_surface.h index abb05600..175150f9 100644 --- a/include/wlr/types/wlr_surface.h +++ b/include/wlr/types/wlr_surface.h @@ -220,7 +220,8 @@ struct wlr_subsurface *wlr_subsurface_create(struct wlr_surface *surface, struct wl_list *resource_list); /** - * Get the root of the subsurface tree for this surface. + * Get the root of the subsurface tree for this surface. Can return NULL if + * a surface in the tree has been destroyed. */ struct wlr_surface *wlr_surface_get_root_surface(struct wlr_surface *surface); diff --git a/types/wlr_surface.c b/types/wlr_surface.c index c251816e..dd022489 100644 --- a/types/wlr_surface.c +++ b/types/wlr_surface.c @@ -1061,6 +1061,9 @@ struct wlr_surface *wlr_surface_get_root_surface(struct wlr_surface *surface) { if (subsurface == NULL) { break; } + if (subsurface->parent == NULL) { + return NULL; + } surface = subsurface->parent; } return surface;