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:
Diffstat (limited to 'source/blender/blenkernel/intern/node.c')
-rw-r--r--source/blender/blenkernel/intern/node.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 4a4140942c8..34b016a08ba 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -1590,11 +1590,14 @@ static void node_unlink_attached(bNodeTree *ntree, bNode *parent)
}
/** \note caller needs to manage node->id user */
-static void node_free_node_ex(bNodeTree *ntree, bNode *node, bool use_api_free_cb)
+static void node_free_node_ex(bNodeTree *ntree, bNode *node, bool remove_animdata, bool use_api_free_cb)
{
bNodeSocket *sock, *nextsock;
- char propname_esc[MAX_IDPROP_NAME * 2];
- char prefix[MAX_IDPROP_NAME * 2];
+
+ /* don't remove node animdata if the tree is localized,
+ * Action is shared with the original tree (T38221)
+ */
+ remove_animdata &= ntree && !(ntree->flag & NTREE_IS_LOCALIZED);
/* extra free callback */
if (use_api_free_cb && node->typeinfo->freefunc_api) {
@@ -1614,10 +1617,15 @@ static void node_free_node_ex(bNodeTree *ntree, bNode *node, bool use_api_free_c
BLI_remlink(&ntree->nodes, node);
- BLI_strescape(propname_esc, node->name, sizeof(propname_esc));
- BLI_snprintf(prefix, sizeof(prefix), "nodes[\"%s\"]", propname_esc);
+ if (remove_animdata) {
+ char propname_esc[MAX_IDPROP_NAME * 2];
+ char prefix[MAX_IDPROP_NAME * 2];
- BKE_animdata_fix_paths_remove((ID *)ntree, prefix);
+ BLI_strescape(propname_esc, node->name, sizeof(propname_esc));
+ BLI_snprintf(prefix, sizeof(prefix), "nodes[\"%s\"]", propname_esc);
+
+ BKE_animdata_fix_paths_remove((ID *)ntree, prefix);
+ }
if (ntree->typeinfo->free_node_cache)
ntree->typeinfo->free_node_cache(ntree, node);
@@ -1658,7 +1666,7 @@ static void node_free_node_ex(bNodeTree *ntree, bNode *node, bool use_api_free_c
void nodeFreeNode(bNodeTree *ntree, bNode *node)
{
- node_free_node_ex(ntree, node, true);
+ node_free_node_ex(ntree, node, true, true);
}
static void node_socket_interface_free(bNodeTree *UNUSED(ntree), bNodeSocket *sock)
@@ -1748,7 +1756,7 @@ void ntreeFreeTree_ex(bNodeTree *ntree, const short do_id_user)
(void)do_id_user;
#endif
- node_free_node_ex(ntree, node, false);
+ node_free_node_ex(ntree, node, false, false);
}
/* free interface sockets */
@@ -2519,7 +2527,7 @@ void BKE_node_clipboard_clear(void)
for (node = node_clipboard.nodes.first; node; node = node_next) {
node_next = node->next;
- node_free_node_ex(NULL, node, false);
+ node_free_node_ex(NULL, node, false, false);
}
node_clipboard.nodes.first = node_clipboard.nodes.last = NULL;