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>2011-02-11 12:37:58 +0300
committerLukas Toenne <lukas.toenne@googlemail.com>2011-02-11 12:37:58 +0300
commit69e72ea42790e5db142365cba46adbd23ecf3b4c (patch)
treeb13ebed9bb751fae1f7ac46c43fc72a8199803c8 /source/blender/editors/space_node/node_edit.c
parenta3d142fce05634d9cf12d0ad12493d0625579732 (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/node_edit.c')
-rw-r--r--source/blender/editors/space_node/node_edit.c37
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);