Revision: 49523
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49523
Author:   lukastoenne
Date:     2012-08-03 10:18:52 +0000 (Fri, 03 Aug 2012)
Log Message:
-----------
Fix for node clipboard copy operator for Frame nodes. Was redirecting the 
parent pointer of the original instead of the copied nodes.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_node/node_edit.c

Modified: trunk/blender/source/blender/editors/space_node/node_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_edit.c 2012-08-03 
09:54:08 UTC (rev 49522)
+++ trunk/blender/source/blender/editors/space_node/node_edit.c 2012-08-03 
10:18:52 UTC (rev 49523)
@@ -1919,6 +1919,22 @@
                }
        }
 
+       /* 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 @@
                }
        }
 
-       /* 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,27 +2001,28 @@
 
        /* 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) {
                nodeAddLink(ntree, link->fromnode->new_node, 
link->fromsock->new_sock,
                            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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to