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:
authorSergey Sharybin <sergey.vfx@gmail.com>2018-11-23 19:02:55 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2018-11-23 19:03:14 +0300
commit3bf7c846eeb4a728c62100b40463874d83f5b3e0 (patch)
tree9ce90a2339ca5b26918883c3894eec31c87309ff /source/blender/blenkernel/intern/node.c
parente5abce922094cbacd316253be73eeed6ce5a6e92 (diff)
Fix T57996: Crash - delete node with a driven parameter
Diffstat (limited to 'source/blender/blenkernel/intern/node.c')
-rw-r--r--source/blender/blenkernel/intern/node.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 14ca2b8562a..183fa37f84b 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -76,6 +76,7 @@
#include "NOD_texture.h"
#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
#define NODE_DEFAULT_MAX_WIDTH 700
@@ -1688,7 +1689,9 @@ 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 remove_animdata, bool use_api_free_cb)
+static void node_free_node_ex(
+ Main *bmain, bNodeTree *ntree, bNode *node,
+ bool remove_animdata, bool use_api_free_cb)
{
bNodeSocket *sock, *nextsock;
@@ -1722,7 +1725,11 @@ static void node_free_node_ex(bNodeTree *ntree, bNode *node, bool remove_animdat
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 (BKE_animdata_fix_paths_remove((ID *)ntree, prefix)) {
+ if (bmain != NULL) {
+ DEG_relations_tag_update(bmain);
+ }
+ }
}
if (ntree->typeinfo->free_node_cache)
@@ -1765,7 +1772,12 @@ static void node_free_node_ex(bNodeTree *ntree, bNode *node, bool remove_animdat
void nodeFreeNode(bNodeTree *ntree, bNode *node)
{
- node_free_node_ex(ntree, node, true, true);
+ node_free_node_ex(NULL, ntree, node, false, true);
+}
+
+void nodeDeleteNode(Main *bmain, bNodeTree *ntree, bNode *node)
+{
+ node_free_node_ex(bmain, ntree, node, true, true);
}
static void node_socket_interface_free(bNodeTree *UNUSED(ntree), bNodeSocket *sock)
@@ -1835,7 +1847,7 @@ void ntreeFreeTree(bNodeTree *ntree)
for (node = ntree->nodes.first; node; node = next) {
next = node->next;
- node_free_node_ex(ntree, node, false, false);
+ node_free_node_ex(NULL, ntree, node, false, false);
}
/* free interface sockets */
@@ -2577,7 +2589,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, false);
+ node_free_node_ex(NULL, NULL, node, false, false);
}
BLI_listbase_clear(&node_clipboard.nodes);