Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel Porces <cmporces>2019-03-16 20:54:00 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-03-16 22:21:16 +0300
commit5797a5fc65c87b69460d910a82d219b5e3ea12ad (patch)
tree98ffac5a6ad2904d916987720460765b763d2e50 /source/blender/editors/space_node
parentb9af4efe41712680d554a389d771e83c66fce5c4 (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.c11
-rw-r--r--source/blender/editors/space_node/node_group.c4
-rw-r--r--source/blender/editors/space_node/node_templates.c4
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);
}
}
}