From 6a5f3449ce76d23cb4e3bd5e43421963ce027137 Mon Sep 17 00:00:00 2001 From: Iliya Katueshenock Date: Fri, 19 May 2023 17:03:14 +0300 Subject: [PATCH 1/4] init --- source/blender/editors/space_node/clipboard.cc | 11 +++++++++++ source/blender/editors/space_node/node_edit.cc | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/source/blender/editors/space_node/clipboard.cc b/source/blender/editors/space_node/clipboard.cc index 5ed91cd4fbe..b641afd109c 100644 --- a/source/blender/editors/space_node/clipboard.cc +++ b/source/blender/editors/space_node/clipboard.cc @@ -42,6 +42,7 @@ struct NodeClipboardItem { }; struct NodeClipboard { + bNode *active_node; Vector nodes; Vector links; @@ -52,6 +53,7 @@ struct NodeClipboard { } this->nodes.clear_and_shrink(); this->links.clear_and_shrink(); + this->active_node = nullptr; } /** @@ -135,6 +137,10 @@ static int node_clipboard_copy_exec(bContext *C, wmOperator * /*op*/) } } + if (bNode *active_node = nodeGetActive(&tree)) { + clipboard.active_node = node_map.lookup_default(active_node, nullptr); + } + for (bNode *new_node : node_map.values()) { /* Parent pointer must be redirected to new node or detached if parent is not copied. */ if (new_node->parent) { @@ -326,6 +332,11 @@ static int node_clipboard_paste_exec(bContext *C, wmOperator *op) update_multi_input_indices_for_removed_links(*new_node); } + if (clipboard.active_node != nullptr) { + bNode *new_active_node = node_map.lookup(clipboard.active_node); + nodeSetActive(&tree, new_active_node); + } + Main *bmain = CTX_data_main(C); ED_node_tree_propagate_change(C, bmain, &tree); /* Pasting nodes can create arbitrary new relations because nodes can reference IDs. */ diff --git a/source/blender/editors/space_node/node_edit.cc b/source/blender/editors/space_node/node_edit.cc index c9c9f7e79d7..281a0f4350c 100644 --- a/source/blender/editors/space_node/node_edit.cc +++ b/source/blender/editors/space_node/node_edit.cc @@ -1295,6 +1295,8 @@ static int node_duplicate_exec(bContext *C, wmOperator *op) Map socket_map; Map duplicated_node_groups; + bNode *actibe_node = nodeGetActive(ntree); + for (bNode *node : get_selected_nodes(*ntree)) { bNode *new_node = bke::node_copy_with_mapping( ntree, *node, LIB_ID_COPY_DEFAULT, true, socket_map); @@ -1370,6 +1372,10 @@ static int node_duplicate_exec(bContext *C, wmOperator *op) remap_pairing(*ntree, node_map); + if (bNode *new_active_node = node_map.lookup_default(actibe_node, nullptr)) { + nodeSetActive(ntree, new_active_node); + } + /* Deselect old nodes, select the copies instead. */ for (const auto item : node_map.items()) { bNode *src_node = item.key; -- 2.30.2 From e12b91b0c2b1446756bf3d27b434359bafd13ff8 Mon Sep 17 00:00:00 2001 From: Iliya Katueshenock Date: Fri, 19 May 2023 17:17:12 +0300 Subject: [PATCH 2/4] progress --- source/blender/editors/space_node/clipboard.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/blender/editors/space_node/clipboard.cc b/source/blender/editors/space_node/clipboard.cc index b641afd109c..4c50d0f7150 100644 --- a/source/blender/editors/space_node/clipboard.cc +++ b/source/blender/editors/space_node/clipboard.cc @@ -42,7 +42,7 @@ struct NodeClipboardItem { }; struct NodeClipboard { - bNode *active_node; + bNode *active_node = nullptr; Vector nodes; Vector links; -- 2.30.2 From e3591a21dac8550dcb5eab7dd56af54521cbb99e Mon Sep 17 00:00:00 2001 From: Iliya Katueshenock Date: Sat, 20 May 2023 19:32:21 +0300 Subject: [PATCH 3/4] progress --- source/blender/editors/space_node/clipboard.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/blender/editors/space_node/clipboard.cc b/source/blender/editors/space_node/clipboard.cc index 4c50d0f7150..4c24a308ae4 100644 --- a/source/blender/editors/space_node/clipboard.cc +++ b/source/blender/editors/space_node/clipboard.cc @@ -332,8 +332,7 @@ static int node_clipboard_paste_exec(bContext *C, wmOperator *op) update_multi_input_indices_for_removed_links(*new_node); } - if (clipboard.active_node != nullptr) { - bNode *new_active_node = node_map.lookup(clipboard.active_node); + if (bNode *new_active_node = node_map.lookup_default(clipboard.active_node, nullptr)) { nodeSetActive(&tree, new_active_node); } -- 2.30.2 From 45733e4d5f5d6c534c2385be80d508f076ed20ed Mon Sep 17 00:00:00 2001 From: Iliya Katueshenock Date: Mon, 22 May 2023 21:37:52 +0300 Subject: [PATCH 4/4] progress --- source/blender/editors/space_node/node_edit.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/blender/editors/space_node/node_edit.cc b/source/blender/editors/space_node/node_edit.cc index 281a0f4350c..38aea15cd48 100644 --- a/source/blender/editors/space_node/node_edit.cc +++ b/source/blender/editors/space_node/node_edit.cc @@ -1295,7 +1295,7 @@ static int node_duplicate_exec(bContext *C, wmOperator *op) Map socket_map; Map duplicated_node_groups; - bNode *actibe_node = nodeGetActive(ntree); + bNode *active_node = nodeGetActive(ntree); for (bNode *node : get_selected_nodes(*ntree)) { bNode *new_node = bke::node_copy_with_mapping( @@ -1372,7 +1372,7 @@ static int node_duplicate_exec(bContext *C, wmOperator *op) remap_pairing(*ntree, node_map); - if (bNode *new_active_node = node_map.lookup_default(actibe_node, nullptr)) { + if (bNode *new_active_node = node_map.lookup_default(active_node, nullptr)) { nodeSetActive(ntree, new_active_node); } -- 2.30.2