forked from bartvdbraak/blender
Fix T86741: Remapping could create doublons of collections in hierarchy.
Code rebuilding/ensuring the sanity of the collection hierarchy was not checking for a same collection being child of the same parent multiple times. This was already prevented to happen in code adding collections to other collections, but not for the remapping case.
This commit is contained in:
parent
56dabfac5c
commit
e3f2c94d39
@ -1617,18 +1617,23 @@ bool BKE_collection_child_remove(Main *bmain, Collection *parent, Collection *ch
|
||||
*/
|
||||
void BKE_collection_parent_relations_rebuild(Collection *collection)
|
||||
{
|
||||
for (CollectionChild *child = collection->children.first, *child_next = NULL; child;
|
||||
child = child_next) {
|
||||
child_next = child->next;
|
||||
LISTBASE_FOREACH_MUTABLE (CollectionChild *, child, &collection->children) {
|
||||
/* Check for duplicated children (can happen with remapping e.g.). */
|
||||
CollectionChild *other_child = collection_find_child(collection, child->collection);
|
||||
if (other_child != child) {
|
||||
BLI_freelinkN(&collection->children, child);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Invalid child, either without a collection, or because it creates a dependency cycle. */
|
||||
if (child->collection == NULL || BKE_collection_cycle_find(collection, child->collection)) {
|
||||
BLI_freelinkN(&collection->children, child);
|
||||
continue;
|
||||
}
|
||||
else {
|
||||
CollectionParent *cparent = MEM_callocN(sizeof(CollectionParent), __func__);
|
||||
cparent->collection = collection;
|
||||
BLI_addtail(&child->collection->parents, cparent);
|
||||
}
|
||||
|
||||
CollectionParent *cparent = MEM_callocN(sizeof(CollectionParent), __func__);
|
||||
cparent->collection = collection;
|
||||
BLI_addtail(&child->collection->parents, cparent);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user