From afa30f1a9d2124f1e7d7e16cac8e1176a22029ed Mon Sep 17 00:00:00 2001 From: Fabian Schempp Date: Thu, 11 Mar 2021 18:53:29 +0100 Subject: Nodes: Fix drag link from output to already linked Multi-Input Socket This patch fixes a visual bug related to connecting an output socket to a Multi-Input Socket, that already has a link to that same output. In this case, the drag link got a new index and snapped to a new position. This path makes the drag link snap to the same position as the first link between the two sockets. Differential Revision: https://developer.blender.org/D10689 --- source/blender/editors/space_node/node_relationships.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'source/blender/editors/space_node/node_relationships.c') diff --git a/source/blender/editors/space_node/node_relationships.c b/source/blender/editors/space_node/node_relationships.c index 963349f876b..9293494a16a 100644 --- a/source/blender/editors/space_node/node_relationships.c +++ b/source/blender/editors/space_node/node_relationships.c @@ -890,10 +890,24 @@ static void node_link_find_socket(bContext *C, wmOperator *op, float cursor[2]) continue; } + /* Skip if tsock is already linked with this output. */ + bNodeLink *existing_link_connected_to_fromsock = NULL; + LISTBASE_FOREACH (bNodeLink *, existing_link, &snode->edittree->links) { + if (existing_link->fromsock == link->fromsock && existing_link->tosock == tsock) { + existing_link_connected_to_fromsock = existing_link; + break; + } + } + /* attach links to the socket */ link->tonode = tnode; link->tosock = tsock; snode->runtime->last_node_hovered_while_dragging_a_link = tnode; + if (existing_link_connected_to_fromsock) { + link->multi_input_socket_index = + existing_link_connected_to_fromsock->multi_input_socket_index; + continue; + } sort_multi_input_socket_links(snode, tnode, link, cursor); } } -- cgit v1.2.3