diff options
author | Miguel Porces <cmporces> | 2019-03-16 20:54:00 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-03-16 22:21:16 +0300 |
commit | 5797a5fc65c87b69460d910a82d219b5e3ea12ad (patch) | |
tree | 98ffac5a6ad2904d916987720460765b763d2e50 /source/blender/editors/space_node | |
parent | b9af4efe41712680d554a389d771e83c66fce5c4 (diff) |
Fix ID user counting issues with NodeCustomGroup.
User counting now happens before init() and after free() methods, so that
the ID users are in a valid state when Python might modify them. ID user
counting was moved into node.c and simplified.
Patch by Miguel with further refactoring by Brecht. Ref D4370.
Diffstat (limited to 'source/blender/editors/space_node')
-rw-r--r-- | source/blender/editors/space_node/node_edit.c | 11 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_group.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_templates.c | 4 |
3 files changed, 5 insertions, 14 deletions
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index b1cada9752a..1a18e886808 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -1590,11 +1590,8 @@ static int node_delete_exec(bContext *C, wmOperator *UNUSED(op)) for (node = snode->edittree->nodes.first; node; node = next) { next = node->next; if (node->flag & SELECT) { - /* check id user here, nodeFreeNode is called for free dbase too */ do_tag_update |= (do_tag_update || node_connected_to_output(bmain, snode->edittree, node)); - if (node->id) - id_us_min(node->id); - nodeDeleteNode(bmain, snode->edittree, node); + nodeRemoveNode(bmain, snode->edittree, node, true); } } @@ -1684,11 +1681,7 @@ static int node_delete_reconnect_exec(bContext *C, wmOperator *UNUSED(op)) next = node->next; if (node->flag & SELECT) { nodeInternalRelink(snode->edittree, node); - - /* check id user here, nodeFreeNode is called for free dbase too */ - if (node->id) - id_us_min(node->id); - nodeDeleteNode(bmain, snode->edittree, node); + nodeRemoveNode(bmain, snode->edittree, node, true); } } diff --git a/source/blender/editors/space_node/node_group.c b/source/blender/editors/space_node/node_group.c index 8c5bf60bc5d..808d9375d22 100644 --- a/source/blender/editors/space_node/node_group.c +++ b/source/blender/editors/space_node/node_group.c @@ -337,11 +337,11 @@ static int node_group_ungroup(Main *bmain, bNodeTree *ntree, bNode *gnode) while (nodes_delayed_free) { node = BLI_linklist_pop(&nodes_delayed_free); - nodeDeleteNode(bmain, ntree, node); + nodeRemoveNode(bmain, ntree, node, false); } /* delete the group instance */ - nodeDeleteNode(bmain, ntree, gnode); + nodeRemoveNode(bmain, ntree, gnode, false); ntree->update |= NTREE_UPDATE_NODES | NTREE_UPDATE_LINKS; diff --git a/source/blender/editors/space_node/node_templates.c b/source/blender/editors/space_node/node_templates.c index aef36b49814..b3edf98c470 100644 --- a/source/blender/editors/space_node/node_templates.c +++ b/source/blender/editors/space_node/node_templates.c @@ -143,9 +143,7 @@ static void node_remove_linked(Main *bmain, bNodeTree *ntree, bNode *rem_node) next = node->next; if (node->flag & NODE_TEST) { - if (node->id) - id_us_min(node->id); - nodeDeleteNode(bmain, ntree, node); + nodeRemoveNode(bmain, ntree, node, true); } } } |