[Bf-blender-cvs] [dca5be9b942] master: Fix: Wrong node link drag search menu items for attribute statistic

Hans Goudey noreply at git.blender.org
Wed Dec 22 23:45:47 CET 2021


Commit: dca5be9b942ab03037910e87548375baa09f0068
Author: Hans Goudey
Date:   Wed Dec 22 16:45:41 2021 -0600
Branches: master
https://developer.blender.org/rBdca5be9b942ab03037910e87548375baa09f0068

Fix: Wrong node link drag search menu items for attribute statistic

Caused by capturing local variables by reference in a function that
outlives the scope it was created in. Also use a more generic function
for the first two inputs.

===================================================================

M	source/blender/nodes/geometry/nodes/node_geo_attribute_statistic.cc

===================================================================

diff --git a/source/blender/nodes/geometry/nodes/node_geo_attribute_statistic.cc b/source/blender/nodes/geometry/nodes/node_geo_attribute_statistic.cc
index b79125d43d1..e4f2e8ef7f4 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_attribute_statistic.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_attribute_statistic.cc
@@ -132,16 +132,13 @@ static std::optional<CustomDataType> node_type_from_other_socket(const bNodeSock
 static void node_gather_link_searches(GatherLinkSearchOpParams &params)
 {
   const bNodeType &node_type = params.node_type();
+  const NodeDeclaration &declaration = *params.node_type().fixed_declaration;
+  search_link_ops_for_declarations(params, declaration.inputs().take_front(2));
+
   const std::optional<CustomDataType> type = node_type_from_other_socket(params.other_socket());
   if (params.in_out() == SOCK_IN) {
-    if (params.other_socket().type == SOCK_GEOMETRY) {
-      params.add_item(IFACE_("Geometry"), [node_type](LinkSearchOpParams &params) {
-        bNode &node = params.add_node(node_type);
-        params.connect_available_socket(node, "Geometry");
-      });
-    }
     if (type) {
-      params.add_item(IFACE_("Attribute"), [&](LinkSearchOpParams &params) {
+      params.add_item(IFACE_("Attribute"), [node_type, type](LinkSearchOpParams &params) {
         bNode &node = params.add_node(node_type);
         node.custom1 = *type;
         params.update_and_connect_available_socket(node, "Attribute");
@@ -149,9 +146,7 @@ static void node_gather_link_searches(GatherLinkSearchOpParams &params)
     }
   }
   else if (type) {
-    /* Only use the first 8 declarations since we set the type automatically. */
-    const NodeDeclaration &declaration = *params.node_type().fixed_declaration;
-    for (const SocketDeclarationPtr &socket_decl : declaration.outputs().take_front(8)) {
+    for (const SocketDeclarationPtr &socket_decl : declaration.outputs()) {
       StringRefNull name = socket_decl->name();
       params.add_item(IFACE_(name.c_str()), [node_type, name, type](LinkSearchOpParams &params) {
         bNode &node = params.add_node(node_type);



More information about the Bf-blender-cvs mailing list