diff options
author | Lukas Toenne <lukas.toenne@googlemail.com> | 2011-02-11 12:37:58 +0300 |
---|---|---|
committer | Lukas Toenne <lukas.toenne@googlemail.com> | 2011-02-11 12:37:58 +0300 |
commit | 69e72ea42790e5db142365cba46adbd23ecf3b4c (patch) | |
tree | b13ebed9bb751fae1f7ac46c43fc72a8199803c8 /source/blender/editors/space_node | |
parent | a3d142fce05634d9cf12d0ad12493d0625579732 (diff) |
Removed the internal_select parameter from ntreeCopyTree. This was used just in one place when duplicating nodes, which is not an actual copying of the tree. The node duplicate operator now copies selected nodes itself.
Diffstat (limited to 'source/blender/editors/space_node')
-rw-r--r-- | source/blender/editors/space_node/node_edit.c | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index 7827058f886..624630b9846 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -1693,27 +1693,36 @@ bNode *node_add_node(SpaceNode *snode, Scene *scene, int type, float locx, float static int node_duplicate_exec(bContext *C, wmOperator *UNUSED(op)) { SpaceNode *snode= CTX_wm_space_node(C); - bNode *node; + bNodeTree *ntree= snode->edittree; + bNode *node, *newnode, *last; ED_preview_kill_jobs(C); - - /* simple id user adjustment, node internal functions dont touch this - * but operators and readfile.c do. */ - for(node= snode->edittree->nodes.first; node; node= node->next) { + + last = ntree->nodes.last; + for(node= ntree->nodes.first; node; node= node->next) { if(node->flag & SELECT) { - id_us_plus(node->id); + newnode = nodeCopyNode(ntree, node, 1); + + /* deselect old node, select the copy instead */ + node->flag &= ~(NODE_SELECT|NODE_ACTIVE); + newnode->flag |= NODE_SELECT; + + if(newnode->id) { + /* simple id user adjustment, node internal functions dont touch this + * but operators and readfile.c do. */ + id_us_plus(newnode->id); + /* to ensure redraws or rerenders happen */ + ED_node_changed_update(snode->id, newnode); + } } + + /* make sure we don't copy new nodes again! */ + if (node==last) + break; } - - ntreeCopyTree(snode->edittree, 1); /* 1 == internally selected nodes */ - /* to ensure redraws or rerenders happen */ - for(node= snode->edittree->nodes.first; node; node= node->next) - if(node->flag & SELECT) - if(node->id) - ED_node_changed_update(snode->id, node); + ntreeSolveOrder(ntree); - ntreeSolveOrder(snode->edittree); node_tree_verify_groups(snode->nodetree); snode_notify(C, snode); |