From d05f27c7b95371db9e7e4e34a919a3623682a114 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 7 Jun 2019 17:45:31 +0200 Subject: Fix T65612: Ungroup in Node Editor Crashes --- source/blender/blenkernel/intern/node.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'source/blender/blenkernel/intern') diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c index e1f7a346b1c..62357b7f878 100644 --- a/source/blender/blenkernel/intern/node.c +++ b/source/blender/blenkernel/intern/node.c @@ -1099,9 +1099,8 @@ bNode *BKE_node_copy_ex(bNodeTree *ntree, const bNode *node_src, const int flag) return node_dst; } -bNode *BKE_node_copy_store_new_pointers(bNodeTree *ntree, bNode *node_src, const int flag) +static void node_set_new_pointers(bNode *node_src, bNode *new_node) { - bNode *new_node = BKE_node_copy_ex(ntree, node_src, flag); /* Store mapping to the node itself. */ node_src->new_node = new_node; /* Store mapping to inputs. */ @@ -1120,9 +1119,30 @@ bNode *BKE_node_copy_store_new_pointers(bNodeTree *ntree, bNode *node_src, const new_output_sock = new_output_sock->next; output_sock_src = output_sock_src->next; } +} + +bNode *BKE_node_copy_store_new_pointers(bNodeTree *ntree, bNode *node_src, const int flag) +{ + bNode *new_node = BKE_node_copy_ex(ntree, node_src, flag); + node_set_new_pointers(node_src, new_node); return new_node; } +bNodeTree *ntreeCopyTree_ex_new_pointers(const bNodeTree *ntree, + Main *bmain, + const bool do_id_user) +{ + bNodeTree *new_ntree = ntreeCopyTree_ex(ntree, bmain, do_id_user); + bNode *new_node = new_ntree->nodes.first; + bNode *node_src = ntree->nodes.first; + while (new_node != NULL) { + node_set_new_pointers(node_src, new_node); + new_node = new_node->next; + node_src = node_src->next; + } + return new_ntree; +} + /* also used via rna api, so we check for proper input output direction */ bNodeLink *nodeAddLink( bNodeTree *ntree, bNode *fromnode, bNodeSocket *fromsock, bNode *tonode, bNodeSocket *tosock) -- cgit v1.2.3