X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Faudio_streamview.cc;h=8c427f2621b97cf5676a3a0e89383bcdeb499606;hb=cf32bf81b81b79250ade5cdae9f79dda6c0eee41;hp=fe4d601e3f0df5568f7a18d3e2a17abbf1908a81;hpb=c83389b8ec5fef9553a401e6123b7e55702af9e2;p=ardour.git diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index fe4d601e3f..8c427f2621 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -24,6 +24,8 @@ #include +#include "pbd/stacktrace.h" + #include "ardour/audioplaylist.h" #include "ardour/audioregion.h" #include "ardour/audiofilesource.h" @@ -202,14 +204,14 @@ AudioStreamView::remove_region_view (boost::weak_ptr weak_r) { ENSURE_GUI_THREAD (*this, &AudioStreamView::remove_region_view, weak_r); - cerr << "a region went way, it appears to be ours (" << this << ")\n"; - boost::shared_ptr r (weak_r.lock()); if (!r) { return; } + cerr << "a region went way, it appears to be ours (" << this << ")\n"; + if (!_trackview.session()->deletion_in_progress()) { for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end();) { @@ -244,46 +246,41 @@ AudioStreamView::undisplay_diskstream () } void -AudioStreamView::playlist_modified_weak (boost::weak_ptr ds) +AudioStreamView::playlist_layered (boost::weak_ptr wds) { - boost::shared_ptr sp (ds.lock()); - if (sp) { - playlist_modified (sp); + boost::shared_ptr ds (wds.lock()); + + if (!ds) { + return; } -} -void -AudioStreamView::playlist_modified (boost::shared_ptr ds) -{ - /* we do not allow shared_ptr to be bound to slots */ - ENSURE_GUI_THREAD (*this, &AudioStreamView::playlist_modified_weak, ds) + cerr << "AS, call SV::modified @ " << get_microseconds() << endl; + + StreamView::playlist_layered (wds); - StreamView::playlist_modified (ds); + cerr << "AS, done with SV::modified @ " << get_microseconds() << endl; /* make sure xfades are on top and all the regionviews are stacked correctly. */ + cerr << "AS, raise xfades @ " << get_microseconds() << endl; for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { i->second->get_canvas_group()->raise_to_top(); } + cerr << "AS, done with xfades @ " << get_microseconds() << endl; } void -AudioStreamView::playlist_changed_weak (boost::weak_ptr ds) +AudioStreamView::playlist_switched (boost::weak_ptr wds) { - boost::shared_ptr sp (ds.lock()); - if (sp) { - playlist_changed (sp); - } -} + boost::shared_ptr ds (wds.lock()); -void -AudioStreamView::playlist_changed (boost::shared_ptr ds) -{ - ENSURE_GUI_THREAD (*this, &AudioStreamView::playlist_changed_weak, boost::weak_ptr (ds)); + if (!ds) { + return; + } playlist_connections.drop_connections (); - StreamView::playlist_changed(ds); + StreamView::playlist_switched (ds); boost::shared_ptr apl = boost::dynamic_pointer_cast(ds->playlist()); @@ -293,27 +290,17 @@ AudioStreamView::playlist_changed (boost::shared_ptr ds) } void -AudioStreamView::add_crossfade_weak (boost::weak_ptr crossfade) +AudioStreamView::add_crossfade (boost::weak_ptr wc) { - boost::shared_ptr sp (crossfade.lock()); + boost::shared_ptr crossfade (wc.lock()); - if (!sp) { + if (!crossfade) { return; } - add_crossfade (sp); -} - -void -AudioStreamView::add_crossfade (boost::shared_ptr crossfade) -{ AudioRegionView* lview = 0; AudioRegionView* rview = 0; - /* we do not allow shared_ptr to be bound to slots */ - - ENSURE_GUI_THREAD (*this, &AudioStreamView::add_crossfade_weak, boost::weak_ptr (crossfade)); - /* first see if we already have a CrossfadeView for this Crossfade */ CrossfadeViewList::iterator i = crossfade_views.find (crossfade); @@ -674,7 +661,7 @@ AudioStreamView::update_rec_regions () region->freeze (); region->set_position (_trackview.get_diskstream()->get_capture_start_frame(n), this); region->set_length (nlen, this); - region->thaw ("updated"); + region->thaw (); if (origlen == 1) { /* our special initial length */ @@ -699,7 +686,7 @@ AudioStreamView::update_rec_regions () region->freeze (); region->set_position (_trackview.get_diskstream()->get_capture_start_frame(n), this); region->set_length (nlen, this); - region->thaw ("updated"); + region->thaw (); if (origlen == 1) { /* our special initial length */