Merge branch 'miscfix' of https://github.com/mojofunk/ardour
[ardour.git] / gtk2_ardour / control_point.cc
index f40a809a4a1fe1a7fa860c080c36838b3f4bb269..d869e094aad16ffc3fd52494b35244165d97814c 100644 (file)
@@ -30,6 +30,8 @@ using namespace ARDOUR;
 using namespace PBD;
 using namespace Gnome; // for Canvas
 
+PBD::Signal1<void, ControlPoint *> ControlPoint::CatchDeletion;
+
 ControlPoint::ControlPoint (AutomationLine& al)
        : _line (al)
 {
@@ -40,7 +42,6 @@ ControlPoint::ControlPoint (AutomationLine& al)
        _y = 0;
        _shape = Full;
        _size = 4.0;
-       _selected = false;
 
        _item = new Canvas::SimpleRect (_line.canvas_group());
        _item->property_draw() = true;
@@ -69,7 +70,6 @@ ControlPoint::ControlPoint (const ControlPoint& other, bool /*dummy_arg_to_force
        _y = other._y;
        _shape = other._shape;
        _size = other._size;
-       _selected = false;
 
        _item = new Canvas::SimpleRect (_line.canvas_group());
        _item->property_fill() = false;
@@ -84,6 +84,8 @@ ControlPoint::ControlPoint (const ControlPoint& other, bool /*dummy_arg_to_force
 
 ControlPoint::~ControlPoint ()
 {
+       CatchDeletion (this); /* EMIT SIGNAL */
+       
        delete _item;
 }
 
@@ -120,6 +122,14 @@ ControlPoint::visible () const
 void
 ControlPoint::reset (double x, double y, AutomationList::iterator mi, uint32_t vi, ShapeType shape)
 {
+       /* If this is too big, libart will confuse itself and segfault after it casts the bounding box
+          of this automation line to ints.  Sigh.
+       */
+
+       if (x > INT32_MAX) {
+               x = INT32_MAX;
+       }
+
        _model = mi;
        _view_index = vi;
        move_to (x, y, shape);