From a4068d39dec127e9e1463e73dfbc62c03fd56cf5 Mon Sep 17 00:00:00 2001 From: Lukas Toenne Date: Tue, 1 Oct 2013 08:55:38 +0000 Subject: Fix for own commit r60468: All the localized node groups ended up in the main library ... This was because of the G.main check in ntreeCopyTree_internal, which determines whether a node tree gets put into main or is an independent data block. This can now be controlled by passing an explicit Main pointer, so we can ensure localized node groups don't pollute main. --- source/blender/blenkernel/intern/node.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'source/blender/blenkernel/intern/node.c') diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index 7cdc2ce856a..9c026815eb9 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -1107,7 +1107,7 @@ bNodeTree *ntreeAddTree(Main *bmain, const char *name, const char *idname) * copying for internal use (threads for eg), where you wont want it to modify the * scene data. */ -static bNodeTree *ntreeCopyTree_internal(bNodeTree *ntree, const short do_id_user, const short do_make_extern, const short copy_previews) +static bNodeTree *ntreeCopyTree_internal(bNodeTree *ntree, Main *bmain, bool do_id_user, bool do_make_extern, bool copy_previews) { bNodeTree *newtree; bNode *node /*, *nnode */ /* UNUSED */, *last; @@ -1116,13 +1116,19 @@ static bNodeTree *ntreeCopyTree_internal(bNodeTree *ntree, const short do_id_use if (ntree == NULL) return NULL; - /* is ntree part of library? */ - for (newtree = G.main->nodetree.first; newtree; newtree = newtree->id.next) - if (newtree == ntree) break; - if (newtree) { - newtree = BKE_libblock_copy(&ntree->id); + if (bmain) { + /* is ntree part of library? */ + for (newtree = bmain->nodetree.first; newtree; newtree = newtree->id.next) { + if (newtree == ntree) { + newtree = BKE_libblock_copy(&ntree->id); + break; + } + } } - else { + else + newtree = NULL; + + if (newtree == NULL) { newtree = MEM_dupallocN(ntree); newtree->id.lib = NULL; /* same as owning datablock id.lib */ BKE_libblock_copy_data(&newtree->id, &ntree->id, true); /* copy animdata and ID props */ @@ -1208,7 +1214,7 @@ static bNodeTree *ntreeCopyTree_internal(bNodeTree *ntree, const short do_id_use bNodeTree *ntreeCopyTree_ex(bNodeTree *ntree, const short do_id_user) { - return ntreeCopyTree_internal(ntree, do_id_user, TRUE, TRUE); + return ntreeCopyTree_internal(ntree, G.main, do_id_user, TRUE, TRUE); } bNodeTree *ntreeCopyTree(bNodeTree *ntree) { @@ -1932,7 +1938,7 @@ bNodeTree *ntreeLocalize(bNodeTree *ntree) /* Make full copy. * Note: previews are not copied here. */ - ltree = ntreeCopyTree_internal(ntree, FALSE, FALSE, FALSE); + ltree = ntreeCopyTree_internal(ntree, NULL, FALSE, FALSE, FALSE); for (node = ltree->nodes.first; node; node = node->next) { if (node->type == NODE_GROUP && node->id) { -- cgit v1.2.3