summaryrefslogtreecommitdiffstats
path: root/server/tree.c
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2013-09-17 01:45:01 +0200
committerFrediano Ziglio <fziglio@redhat.com>2015-11-12 12:26:47 +0000
commit120c9ae38bb26150f5d90d1817a99065dfa37133 (patch)
tree2c7019d4e674cc81dba8d820f44d76e551e7e974 /server/tree.c
parentcc8107c830d045a2deb9bffed6d32d1f563c9a35 (diff)
downloadspice-120c9ae38bb26150f5d90d1817a99065dfa37133.tar.gz
spice-120c9ae38bb26150f5d90d1817a99065dfa37133.tar.xz
spice-120c9ae38bb26150f5d90d1817a99065dfa37133.zip
worker: move some tree container functions
Acked-by: Fabiano Fidêncio <fidencio@redhat.com>
Diffstat (limited to 'server/tree.c')
-rw-r--r--server/tree.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/server/tree.c b/server/tree.c
index bf50edfc..ad31f09b 100644
--- a/server/tree.c
+++ b/server/tree.c
@@ -223,3 +223,30 @@ Container* container_new(DrawItem *item)
return container;
}
+
+void container_free(Container *container)
+{
+ spice_return_if_fail(ring_is_empty(&container->items));
+
+ ring_remove(&container->base.siblings_link);
+ region_destroy(&container->base.rgn);
+ free(container);
+}
+
+void container_cleanup(Container *container)
+{
+ /* visit upward, removing containers */
+ /* non-empty container get its element moving up ?? */
+ while (container && container->items.next == container->items.prev) {
+ Container *next = container->base.container;
+ if (container->items.next != &container->items) {
+ TreeItem *item = (TreeItem *)ring_get_head(&container->items);
+ spice_assert(item);
+ ring_remove(&item->siblings_link);
+ ring_add_after(&item->siblings_link, &container->base.siblings_link);
+ item->container = container->base.container;
+ }
+ container_free(container);
+ container = next;
+ }
+}