* bugfix from http://tracker.ardour.org/view.php?id=2155 thanks to kristian: fix...
[ardour.git] / gtk2_ardour / streamview.cc
index f6d6924a761efd17c7da49c2829f81b5842d989a..46cb078c63cbb2641ff043c3a807e8551ffdea77 100644 (file)
@@ -47,6 +47,7 @@ using namespace Editing;
 
 StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Group* group)
        : _trackview (tv)
+       , owns_canvas_group(group == 0)
        , canvas_group(group ? group : new ArdourCanvas::Group(*_trackview.canvas_display))
        , canvas_rect(new ArdourCanvas::SimpleRect (*canvas_group))
        , _samples_per_unit(_trackview.editor.get_current_zoom())
@@ -62,7 +63,6 @@ StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Group* group)
 {
        /* set_position() will position the group */
 
-       canvas_rect = new ArdourCanvas::SimpleRect (*canvas_group);
        canvas_rect->property_x1() = 0.0;
        canvas_rect->property_y1() = 0.0;
        canvas_rect->property_x2() = _trackview.editor.frame_to_pixel (max_frames);
@@ -86,7 +86,12 @@ StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Group* group)
 StreamView::~StreamView ()
 {
        undisplay_diskstream ();
-       delete canvas_group;
+       
+       delete canvas_rect;
+       
+       if (owns_canvas_group) {
+               delete canvas_group;
+       }
 }
 
 void
@@ -171,8 +176,9 @@ StreamView::remove_region_view (boost::weak_ptr<Region> weak_r)
 
        for (list<RegionView *>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
                if (((*i)->region()) == r) {
-                       delete *i;
+                       RegionView* rv = *i;
                        region_views.erase (i);
+                       delete rv;
                        break;
                }
        }
@@ -181,8 +187,11 @@ StreamView::remove_region_view (boost::weak_ptr<Region> weak_r)
 void
 StreamView::undisplay_diskstream ()
 {
-       for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
+       for (RegionViewList::iterator i = region_views.begin(); i != region_views.end() ; ) {
+               RegionViewList::iterator next = i;
+               ++next;
                delete *i;
+               i = next;
        }
 
        region_views.clear();
@@ -379,7 +388,6 @@ StreamView::set_selected_regionviews (RegionSelection& regions)
 {
        bool selected;
 
-       // cerr << _trackview.name() << " (selected = " << regions.size() << ")" << endl;
        for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
                
                selected = false;
@@ -389,8 +397,7 @@ StreamView::set_selected_regionviews (RegionSelection& regions)
                                selected = true;
                        }
                }
-               
-               // cerr << "\tregion " << (*i)->region().name() << " selected = " << selected << endl;
+
                (*i)->set_selected (selected);
        }
 }