view: add defensive checks for null content_tree

This commit is contained in:
John Lindgren 2025-11-24 10:35:21 -05:00
parent b1e7282995
commit 8bd20f19dc
4 changed files with 14 additions and 3 deletions

View file

@ -77,7 +77,7 @@ get_view_part(struct view *view, struct wlr_scene_node *node)
snprintf(view_name, sizeof(view_name), "view (%s)", view->app_id);
return view_name;
}
if (node == &view->content_tree->node) {
if (view->content_tree && node == &view->content_tree->node) {
return "view->content_tree";
}
if (view->resize_indicator.tree

View file

@ -74,6 +74,13 @@ render_node(struct server *server, struct wlr_render_pass *pass,
static struct wlr_buffer *
render_thumb(struct output *output, struct view *view)
{
if (!view->content_tree) {
/*
* Defensive. Could possibly occur if view was unmapped
* with OSD already displayed.
*/
return NULL;
}
struct server *server = output->server;
struct wlr_buffer *buffer = wlr_allocator_create_buffer(server->allocator,
view->current.width, view->current.height,

View file

@ -2517,7 +2517,11 @@ view_set_shade(struct view *view, bool shaded)
view->shaded = shaded;
ssd_enable_shade(view->ssd, view->shaded);
wlr_scene_node_set_enabled(&view->content_tree->node, !view->shaded);
/* An unmapped view may not have a content tree */
if (view->content_tree) {
wlr_scene_node_set_enabled(&view->content_tree->node,
!view->shaded);
}
}
void