summaryrefslogtreecommitdiffstats
path: root/server/tree.c
diff options
context:
space:
mode:
authorJonathon Jongsma <jjongsma@redhat.com>2015-11-13 17:52:15 +0100
committerFabiano FidĂȘncio <fidencio@redhat.com>2015-11-13 18:29:40 +0100
commita408bb3e2551baa8cd1fe309fca7c73160135ed7 (patch)
treed4437a5f6f0e201e5ceffca5c614d02729652682 /server/tree.c
parentdea8500fe9af6bbe9220d5b45dce3460a1399c53 (diff)
downloadspice-a408bb3e2551baa8cd1fe309fca7c73160135ed7.tar.gz
spice-a408bb3e2551baa8cd1fe309fca7c73160135ed7.tar.xz
spice-a408bb3e2551baa8cd1fe309fca7c73160135ed7.zip
Move some tree item functions to tree.[ch]
Also rename some functions slightly: __find_shadow -> tree_item_find_shadow() __contained_by -> tree_item_contained_by() ring_of -> tree_item_container_items();
Diffstat (limited to 'server/tree.c')
-rw-r--r--server/tree.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/server/tree.c b/server/tree.c
index ad31f09b..1daa90c2 100644
--- a/server/tree.c
+++ b/server/tree.c
@@ -250,3 +250,53 @@ void container_cleanup(Container *container)
container = next;
}
}
+
+/* FIXME: document weird function: go down containers, and return drawable->shadow? */
+Shadow* tree_item_find_shadow(TreeItem *item)
+{
+ while (item->type == TREE_ITEM_TYPE_CONTAINER) {
+ if (!(item = (TreeItem *)ring_get_tail(&((Container *)item)->items))) {
+ return NULL;
+ }
+ }
+
+ if (item->type != TREE_ITEM_TYPE_DRAWABLE) {
+ return NULL;
+ }
+
+ return ((DrawItem *)item)->shadow;
+}
+
+Ring *tree_item_container_items(TreeItem *item, Ring *ring)
+{
+ return (item->container) ? &item->container->items : ring;
+}
+
+int tree_item_contained_by(TreeItem *item, Ring *ring)
+{
+ spice_assert(item && ring);
+ do {
+ Ring *now = tree_item_container_items(item, ring);
+ if (now == ring) {
+ return TRUE;
+ }
+ } while ((item = (TreeItem *)item->container));
+
+ return FALSE;
+}
+
+void draw_item_remove_shadow(DrawItem *item)
+{
+ Shadow *shadow;
+
+ if (!item->shadow) {
+ return;
+ }
+ shadow = item->shadow;
+ item->shadow = NULL;
+ /* shadow_free? */
+ ring_remove(&shadow->base.siblings_link);
+ region_destroy(&shadow->base.rgn);
+ region_destroy(&shadow->on_hold);
+ free(shadow);
+}