diff --git a/source/blender/editors/space_node/node_edit.cc b/source/blender/editors/space_node/node_edit.cc index 89e4ab12db8..9e556dcc6b0 100644 --- a/source/blender/editors/space_node/node_edit.cc +++ b/source/blender/editors/space_node/node_edit.cc @@ -1765,6 +1765,9 @@ static int node_delete_exec(bContext *C, wmOperator * /*op*/) ED_preview_kill_jobs(CTX_wm_manager(C), bmain); + /* Delete paired nodes as well. */ + node_select_paired(*snode->edittree); + LISTBASE_FOREACH_MUTABLE (bNode *, node, &snode->edittree->nodes) { if (node->flag & SELECT) { nodeRemoveNode(bmain, snode->edittree, node, true); @@ -1852,6 +1855,9 @@ static int node_delete_reconnect_exec(bContext *C, wmOperator * /*op*/) ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C)); + /* Delete paired nodes as well. */ + node_select_paired(*snode->edittree); + LISTBASE_FOREACH_MUTABLE (bNode *, node, &snode->edittree->nodes) { if (node->flag & SELECT) { nodeInternalRelink(snode->edittree, node); diff --git a/source/blender/editors/space_node/node_intern.hh b/source/blender/editors/space_node/node_intern.hh index a18d1d19240..6a90ffeebf1 100644 --- a/source/blender/editors/space_node/node_intern.hh +++ b/source/blender/editors/space_node/node_intern.hh @@ -190,6 +190,10 @@ void node_socket_select(bNode *node, bNodeSocket &sock); void node_socket_deselect(bNode *node, bNodeSocket &sock, bool deselect_node); void node_deselect_all_input_sockets(bNodeTree &node_tree, bool deselect_nodes); void node_deselect_all_output_sockets(bNodeTree &node_tree, bool deselect_nodes); +/** + * Select nodes that are paired to a selected node. + */ +void node_select_paired(bNodeTree &node_tree); void node_select_single(bContext &C, bNode &node); void NODE_OT_select(wmOperatorType *ot); diff --git a/source/blender/editors/space_node/node_select.cc b/source/blender/editors/space_node/node_select.cc index 663a235b834..3d56cfa5d68 100644 --- a/source/blender/editors/space_node/node_select.cc +++ b/source/blender/editors/space_node/node_select.cc @@ -308,6 +308,22 @@ void node_deselect_all_output_sockets(bNodeTree &node_tree, const bool deselect_ } } +void node_select_paired(bNodeTree &node_tree) +{ + for (bNode *input_node : node_tree.nodes_by_type("GeometryNodeSimulationInput")) { + const NodeGeometrySimulationInput *storage = static_cast( + input_node->storage); + if (bNode *output_node = node_tree.node_by_id(storage->output_node_id)) { + if (input_node->flag & NODE_SELECT) { + output_node->flag |= NODE_SELECT; + } + if (output_node->flag & NODE_SELECT) { + input_node->flag |= NODE_SELECT; + } + } + } +} + VectorSet get_selected_nodes(bNodeTree &node_tree) { VectorSet selected_nodes;