diff options
author | Maxim Vasiliev <qmax> | 2020-04-06 17:23:43 +0300 |
---|---|---|
committer | Bastien Montagne <b.mont29@gmail.com> | 2020-04-06 17:27:52 +0300 |
commit | c544df997ed9869ee053f1b45e1da6d8bf5f5e9c (patch) | |
tree | 521e536c84ba5137a07e3d0ae7d994a0f7d1bb63 | |
parent | 95f51bb01deaf2f863f97aff1dbcd967ea524287 (diff) |
Fix user counting when ungrouping a node group.
Existing code for ungrouping did not correctly handle user counters:
- counter for the group was not decremented
- counters for containing nodes were not incremented
The latter resulted in losing some nodes after orphan cleaning or several save/reload cycles.
The bug did not have destructive consequences until recently,
because it was compensated by another bug (fixed in rBe993667a46c2).
Maniphest Tasks: T74665, T74682
Differential Revision: https://developer.blender.org/D7332
-rw-r--r-- | source/blender/editors/space_node/node_group.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/source/blender/editors/space_node/node_group.c b/source/blender/editors/space_node/node_group.c index 2a4c6147d5d..3a0ef45a68d 100644 --- a/source/blender/editors/space_node/node_group.c +++ b/source/blender/editors/space_node/node_group.c @@ -193,11 +193,11 @@ static int node_group_ungroup(Main *bmain, bNodeTree *ntree, bNode *gnode) } /* wgroup is a temporary copy of the NodeTree we're merging in - * - all of wgroup's nodes are transferred across to their new home + * - all of wgroup's nodes are copied across to their new home * - ngroup (i.e. the source NodeTree) is left unscathed - * - temp copy. don't change ID usercount + * - temp copy. do change ID usercount for the copies */ - wgroup = ntreeCopyTree_ex_new_pointers(ngroup, bmain, false); + wgroup = ntreeCopyTree_ex_new_pointers(ngroup, bmain, true); /* Add the nodes into the ntree */ for (node = wgroup->nodes.first; node; node = nextnode) { @@ -351,8 +351,8 @@ static int node_group_ungroup(Main *bmain, bNodeTree *ntree, bNode *gnode) nodeRemoveNode(bmain, ntree, node, false); } - /* delete the group instance */ - nodeRemoveNode(bmain, ntree, gnode, false); + /* delete the group instance and dereference group tree */ + nodeRemoveNode(bmain, ntree, gnode, true); ntree->update |= NTREE_UPDATE_NODES | NTREE_UPDATE_LINKS; |