diff --git a/sway/tree/view.c b/sway/tree/view.c index be813be98..7fd066978 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -43,20 +43,17 @@ bool view_init(struct sway_view *view, enum sway_view_type type, bool failed = false; view->scene_tree = alloc_scene_tree(root->staging, &failed); view->content_tree = alloc_scene_tree(view->scene_tree, &failed); + if (failed) { + goto err; + } - if (!failed && !scene_descriptor_assign(&view->scene_tree->node, - SWAY_SCENE_DESC_VIEW, view)) { - failed = true; + if (!scene_descriptor_assign(&view->scene_tree->node, SWAY_SCENE_DESC_VIEW, view)) { + goto err; } view->image_capture_scene = wlr_scene_create(); if (view->image_capture_scene == NULL) { - failed = true; - } - - if (failed) { - wlr_scene_node_destroy(&view->scene_tree->node); - return false; + goto err; } view->type = type; @@ -67,6 +64,10 @@ bool view_init(struct sway_view *view, enum sway_view_type type, view->tearing_mode = TEARING_WINDOW_HINT; wl_signal_init(&view->events.unmap); return true; + +err: + wlr_scene_node_destroy(&view->scene_tree->node); + return false; } void view_destroy(struct sway_view *view) {