--- a/ui/common/object.c Thu Oct 30 21:29:18 2025 +0100 +++ b/ui/common/object.c Fri Oct 31 10:12:27 2025 +0100 @@ -144,4 +144,29 @@ } else { toplevel->container_begin = NULL; } + + // TODO: free container? } + +/* + * This might look like a weird function, but in case a container creates a + * sub-container, 2 container objects are added to the list, however we want + * only one container, otherwise ui_container_finish() would not work + */ +void uic_object_remove_second_last_container(UiObject *toplevel) { + if(toplevel->container_end && toplevel->container_end->prev) { + UiContainerX *end = toplevel->container_end; + UiContainerX *rm = toplevel->container_end->prev; + + end->prev = rm->prev; + if(rm->prev) { + rm->prev->next = end; + } else { + toplevel->container_begin = end; + } + + // TODO: free container? + } else { + fprintf(stderr, "Error: uic_object_remove_second_last_container expected at least 2 containers\n"); + } +}