Fix 1800324: closing a window while an animation is playing crashes studio, so don...
[synfig.git] / synfig-core / trunk / src / synfig / valuenode.cpp
index 4a66e6a..5e23fc7 100644 (file)
@@ -44,6 +44,7 @@
 #include "valuenode_scale.h"
 #include "valuenode_segcalctangent.h"
 #include "valuenode_segcalcvertex.h"
+#include "valuenode_repeat_gradient.h"
 #include "valuenode_stripes.h"
 #include "valuenode_subtract.h"
 #include "valuenode_timedswap.h"
@@ -102,6 +103,7 @@ ValueNode::subsys_init()
        ADD_VALUENODE(ValueNode_Composite,              "composite",            _("Composite")                  );
        ADD_VALUENODE(ValueNode_RadialComposite,"radial_composite",     _("Radial Composite")   );
        ADD_VALUENODE(ValueNode_Reference,              "reference",            _("Reference")                  );
+       ADD_VALUENODE(ValueNode_Repeat_Gradient,"repeat_gradient",      _("Repeat Gradient")    );
        ADD_VALUENODE(ValueNode_Scale,                  "scale",                        _("Scale")                              );
        ADD_VALUENODE(ValueNode_SegCalcTangent, "segcalctangent",       _("Segment Tangent")    );
        ADD_VALUENODE(ValueNode_SegCalcVertex,  "segcalcvertex",        _("Segment Vertex")             );
@@ -233,9 +235,12 @@ ValueNode::~ValueNode()
 void
 ValueNode::on_changed()
 {
-       if(get_parent_canvas())
-               get_parent_canvas()->signal_value_node_changed()(this);
-       else if(get_root_canvas() && get_parent_canvas())
+       etl::loose_handle<Canvas> parent_canvas = get_parent_canvas();
+       if(parent_canvas)
+               do                                              // signal to all the ancestor canvases
+                       parent_canvas->signal_value_node_changed()(this);
+               while (parent_canvas = parent_canvas->parent());
+       else if(get_root_canvas())
                get_root_canvas()->signal_value_node_changed()(this);
 
        Node::on_changed();
@@ -430,7 +435,7 @@ PlaceholderValueNode::create(ValueBase::Type type)
 }
 
 ValueBase
-PlaceholderValueNode::operator()(Time t)const
+PlaceholderValueNode::operator()(Time /*t*/)const
 {
        assert(0);
        return ValueBase();