From 5797a5fc65c87b69460d910a82d219b5e3ea12ad Mon Sep 17 00:00:00 2001 From: Miguel Porces Date: Sat, 16 Mar 2019 18:54:00 +0100 Subject: 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. --- source/blender/editors/space_node/node_edit.c | 11 ++--------- source/blender/editors/space_node/node_group.c | 4 ++-- source/blender/editors/space_node/node_templates.c | 4 +--- 3 files changed, 5 insertions(+), 14 deletions(-) (limited to 'source/blender/editors/space_node') 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); } } } -- cgit v1.2.3