+ if (!candidate_check(get_param_vocab(),x))
+ return false;
+
+ ValueNode::Handle value_node;
+ ValueDesc value_desc(x.find("value_desc")->second.get_value_desc());
+
+ if(value_desc.parent_is_value_node())
+ value_node = value_desc.get_parent_value_node();
+ else
+ value_node = x.find("value_node")->second.get_value_node();
+
+ // We need a dynamic list.
+ return (ValueNode_DynamicList::Handle::cast_dynamic(value_node) &&
+ // We need the list not to be looped.
+ !ValueNode_DynamicList::Handle::cast_dynamic(value_node)->get_loop());
+}
+
+bool
+Action::ValueNodeDynamicListLoop::set_param(const synfig::String& name, const Action::Param ¶m)
+{
+ if(!value_node && name=="value_desc" && param.get_type()==Param::TYPE_VALUEDESC)