From 5f1541db4c3d4fd4d571d0010947c3c13caff3db Mon Sep 17 00:00:00 2001 From: Patrick McDermott Date: Wed, 25 Oct 2017 10:19:08 -0400 Subject: mq_tree_remove_allocated(): Implement --- diff --git a/src/tree.c b/src/tree.c index 488733c..c885be0 100644 --- a/src/tree.c +++ b/src/tree.c @@ -181,8 +181,32 @@ mq_tree_append_sibling_allocated(MqTree *node, MqTree *sibling, gpointer data) void mq_tree_remove_allocated(MqTree *node) { - /* TODO */ - node = node; + MqTree *child; + + /* Link previous sibling or parent to children. */ + if (node->prev) { + node->prev->next = node->first_child; + } else { + node->parent->first_child = node->first_child; + if (!node->next) { + node->parent->last_child = node->last_child; + } + } + + /* Link children to siblings (may be NULL). */ + if (node->first_child) { + node->first_child->prev = node->prev; + } + if (node->last_child) { + node->last_child->next = node->next; + } + + /* Link children to parent. */ + for (child = node->first_child; child; child = child->next) { + child->parent = node->parent; + } + + update_positions(node, -1); } MqTree * -- cgit v0.9.1