diff options
author | Jonathon Jongsma <jjongsma@redhat.com> | 2015-11-13 17:52:15 +0100 |
---|---|---|
committer | Fabiano FidĂȘncio <fidencio@redhat.com> | 2015-11-13 18:29:40 +0100 |
commit | a408bb3e2551baa8cd1fe309fca7c73160135ed7 (patch) | |
tree | d4437a5f6f0e201e5ceffca5c614d02729652682 /server/tree.c | |
parent | dea8500fe9af6bbe9220d5b45dce3460a1399c53 (diff) | |
download | spice-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.c | 50 |
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); +} |