summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/automation_line.cc9
-rw-r--r--gtk2_ardour/control_point.h3
2 files changed, 10 insertions, 2 deletions
diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc
index 34d59ef581..802c29cf01 100644
--- a/gtk2_ardour/automation_line.cc
+++ b/gtk2_ardour/automation_line.cc
@@ -131,8 +131,13 @@ AutomationLine::AutomationLine (const string& name,
AutomationLine::~AutomationLine ()
{
- vector_delete (&control_points);
- delete group;
+ delete group; // deletes child items
+
+ for (std::vector<ControlPoint *>::iterator i = control_points.begin(); i != control_points.end(); i++) {
+ (*i)->unset_item ();
+ delete *i;
+ }
+ control_points.clear ();
if (_our_time_converter) {
delete _time_converter;
diff --git a/gtk2_ardour/control_point.h b/gtk2_ardour/control_point.h
index 88b074f6f9..ed9c10e6d7 100644
--- a/gtk2_ardour/control_point.h
+++ b/gtk2_ardour/control_point.h
@@ -79,6 +79,9 @@ public:
ArdourCanvas::Item& item() const;
+ /* used from ~AutomationLine */
+ void unset_item () { _item = 0 ; }
+
ARDOUR::AutomationList::iterator model() const { return _model; }
AutomationLine& line() const { return _line; }