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.
This commit is contained in:
Miguel Porces
2019-03-16 18:54:00 +01:00
committed by Brecht Van Lommel
parent b9af4efe41
commit 5797a5fc65
10 changed files with 73 additions and 71 deletions

View File

@@ -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);
}
}