summaryrefslogtreecommitdiff
path: root/render/box.c
diff options
context:
space:
mode:
Diffstat (limited to 'render/box.c')
-rw-r--r--render/box.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/render/box.c b/render/box.c
index 7e0df2483..f00b8aa1d 100644
--- a/render/box.c
+++ b/render/box.c
@@ -133,7 +133,35 @@ void box_insert_sibling(struct box *box, struct box *new_box)
/**
- * Free the a box tree recursively.
+ * Unlink a box from the box tree and then free it recursively.
+ *
+ * \param box box to unlink and free recursively.
+ */
+
+void box_unlink_and_free(struct box *box)
+{
+ struct box *parent = box->parent;
+ struct box *next = box->next;
+ struct box *prev = box->prev;
+
+ if (parent) {
+ if (parent->children == box)
+ parent->children = next;
+ if (parent->last == box)
+ parent->last = next ? next : prev;
+ }
+
+ if (prev)
+ prev->next = next;
+ if (next)
+ next->prev = prev;
+
+ box_free(box);
+}
+
+
+/**
+ * Free a box tree recursively.
*
* \param box box to free recursively
*