Use goto-based error handling in view_init()

This is less surprising than checking for the failed flag in the
happy path.
This commit is contained in:
Simon Ser 2026-01-06 00:19:57 +01:00 committed by Kenny Levinsen
parent 723b1ea3b7
commit c09d0f1d4a

View file

@ -43,20 +43,17 @@ bool view_init(struct sway_view *view, enum sway_view_type type,
bool failed = false; bool failed = false;
view->scene_tree = alloc_scene_tree(root->staging, &failed); view->scene_tree = alloc_scene_tree(root->staging, &failed);
view->content_tree = alloc_scene_tree(view->scene_tree, &failed); view->content_tree = alloc_scene_tree(view->scene_tree, &failed);
if (failed) {
goto err;
}
if (!failed && !scene_descriptor_assign(&view->scene_tree->node, if (!scene_descriptor_assign(&view->scene_tree->node, SWAY_SCENE_DESC_VIEW, view)) {
SWAY_SCENE_DESC_VIEW, view)) { goto err;
failed = true;
} }
view->image_capture_scene = wlr_scene_create(); view->image_capture_scene = wlr_scene_create();
if (view->image_capture_scene == NULL) { if (view->image_capture_scene == NULL) {
failed = true; goto err;
}
if (failed) {
wlr_scene_node_destroy(&view->scene_tree->node);
return false;
} }
view->type = type; 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; view->tearing_mode = TEARING_WINDOW_HINT;
wl_signal_init(&view->events.unmap); wl_signal_init(&view->events.unmap);
return true; return true;
err:
wlr_scene_node_destroy(&view->scene_tree->node);
return false;
} }
void view_destroy(struct sway_view *view) { void view_destroy(struct sway_view *view) {