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:
authorLukas Toenne <lukas.toenne@googlemail.com>2012-08-03 14:18:52 +0400
committerLukas Toenne <lukas.toenne@googlemail.com>2012-08-03 14:18:52 +0400
commitc12d0fd76cff389c0b9e8e3ec4efad39d3dffc7a (patch)
tree33798f24cc6035850add9fa242bb90bd35e75671
parent52e31a4866ab8db0079c494348dfd642b6694935 (diff)
Fix for node clipboard copy operator for Frame nodes. Was redirecting the parent pointer of the original instead of the copied nodes.
-rw-r--r--source/blender/editors/space_node/node_edit.c47
1 files changed, 27 insertions, 20 deletions
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index c3e5337b642..16760ca9897 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -1919,6 +1919,22 @@ static int node_clipboard_copy_exec(bContext *C, wmOperator *UNUSED(op))
}
}
+ /* ensure valid pointers */
+ for (node = ntree->nodes.first; node; node = node->next) {
+ if (node->flag & SELECT) {
+ bNode *new_node = node->new_node;
+ if (new_node->parent) {
+ /* parent pointer must be redirected to new node or detached if parent is not copied */
+ if (new_node->parent->flag & NODE_SELECT) {
+ new_node->parent = new_node->parent->new_node;
+ }
+ else {
+ nodeDetachNode(new_node);
+ }
+ }
+ }
+ }
+
/* copy links between selected nodes
* NB: this depends on correct node->new_node and sock->new_sock pointers from above copy!
*/
@@ -1938,16 +1954,6 @@ static int node_clipboard_copy_exec(bContext *C, wmOperator *UNUSED(op))
}
}
- /* reparent copied nodes */
- for (node = ntree->nodes.first; node; node = node->next) {
- if ((node->flag & SELECT) && node->parent) {
- if (node->parent->flag & SELECT)
- node->parent = node->parent->new_node;
- else
- node->parent = NULL;
- }
- }
-
return OPERATOR_FINISHED;
}
@@ -1995,14 +2001,21 @@ static int node_clipboard_paste_exec(bContext *C, wmOperator *UNUSED(op))
/* copy nodes from clipboard */
for (node = nodeClipboardGetNodes()->first; node; node = node->next) {
- bNode *newnode = nodeCopyNode(ntree, node);
+ bNode *new_node = nodeCopyNode(ntree, node);
/* pasted nodes are selected */
- node_select(newnode);
+ node_select(new_node);
/* place nodes around the mouse cursor */
- newnode->locx += snode->mx - centerx;
- newnode->locy += snode->my - centery;
+ new_node->locx += snode->mx - centerx;
+ new_node->locy += snode->my - centery;
+ }
+
+ /* reparent copied nodes */
+ for (node = nodeClipboardGetNodes()->first; node; node = node->next) {
+ bNode *new_node = node->new_node;
+ if (new_node->parent)
+ new_node->parent = new_node->parent->new_node;
}
for (link = nodeClipboardGetLinks()->first; link; link = link->next) {
@@ -2010,12 +2023,6 @@ static int node_clipboard_paste_exec(bContext *C, wmOperator *UNUSED(op))
link->tonode->new_node, link->tosock->new_sock);
}
- /* reparent copied nodes */
- for (node = nodeClipboardGetNodes()->first; node; node = node->next) {
- if (node->new_node->parent)
- node->new_node->parent = node->new_node->parent->new_node;
- }
-
ntreeUpdateTree(snode->edittree);
snode_notify(C, snode);