}
void
-AudioStreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
+AudioStreamView::playlist_changed (boost::weak_ptr<Diskstream> wptr)
{
- ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::playlist_changed), ds));
+ ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::playlist_changed), wptr));
+
+ boost::shared_ptr<Diskstream> ds = wptr.lock();
+
+ if (!ds) {
+ return;
+ }
StreamView::playlist_changed(ds);
void undisplay_diskstream ();
void redisplay_diskstream ();
void playlist_modified ();
- void playlist_changed (boost::shared_ptr<ARDOUR::Diskstream>);
+ void playlist_changed (boost::weak_ptr<ARDOUR::Diskstream>);
void add_crossfade (boost::shared_ptr<ARDOUR::Crossfade>);
void add_crossfade_weak (boost::weak_ptr<ARDOUR::Crossfade>);
{
ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::remove_route), tv));
-
TrackViewList::iterator i;
TreeModel::Children rows = route_display_model->children();
TreeModel::Children::iterator ri;
- if ((i = find (track_views.begin(), track_views.end(), tv)) != track_views.end()) {
- track_views.erase (i);
- }
-
for (ri = rows.begin(); ri != rows.end(); ++ri) {
if ((*ri)[route_display_columns.tv] == tv) {
route_display_model->erase (ri);
break;
}
}
+
+ if ((i = find (track_views.begin(), track_views.end(), tv)) != track_views.end()) {
+ track_views.erase (i);
+ }
+
/* since the editor mixer goes away when you remove a route, set the
* button to inactive and untick the menu option
*/
+
editor_mixer_button.set_active(false);
ActionManager::uncheck_toggleaction ("<Actions>/Editor/show-editor-mixer");
void
RouteTimeAxisView::playlist_changed ()
-
{
label_view ();
}
void
-StreamView::display_diskstream (boost::shared_ptr<Diskstream> ds)
+StreamView::display_diskstream (boost::weak_ptr<Diskstream> wds)
{
+ boost::shared_ptr<Diskstream> ds = wds.lock();
+
+ if (!ds) {
+ return;
+ }
+
playlist_change_connection.disconnect();
- playlist_changed (ds);
- playlist_change_connection = ds->PlaylistChanged.connect (bind (mem_fun (*this, &StreamView::playlist_changed), ds));
+ playlist_changed (wds);
+ playlist_change_connection = ds->PlaylistChanged.connect (bind (mem_fun (*this, &StreamView::playlist_changed), wds));
}
void
}
void
-StreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
+StreamView::playlist_changed (boost::weak_ptr<Diskstream> wptr)
{
- ENSURE_GUI_THREAD (bind (mem_fun (*this, &StreamView::playlist_changed), ds));
+ ENSURE_GUI_THREAD (bind (mem_fun (*this, &StreamView::playlist_changed), wptr));
+
+ boost::shared_ptr<Diskstream> ds = wptr.lock();
+
+ if (!ds) {
+ return;
+ }
/* disconnect from old playlist */
Track *t;
if ((t = _trackview.track()) != 0) {
- Gtkmm2ext::UI::instance()->call_slot (bind (mem_fun (*this, &StreamView::display_diskstream), t->diskstream()));
+ Gtkmm2ext::UI::instance()->call_slot (bind (mem_fun (*this, &StreamView::display_diskstream), boost::weak_ptr<Diskstream> (t->diskstream())));
} else {
Gtkmm2ext::UI::instance()->call_slot (mem_fun (*this, &StreamView::undisplay_diskstream));
}
virtual void remove_region_view (boost::weak_ptr<ARDOUR::Region> );
//void remove_rec_region (boost::shared_ptr<ARDOUR::Region>); (unused)
- void display_diskstream (boost::shared_ptr<ARDOUR::Diskstream>);
+ void display_diskstream (boost::weak_ptr<ARDOUR::Diskstream>);
virtual void undisplay_diskstream ();
virtual void redisplay_diskstream () = 0;
void diskstream_changed ();
- virtual void playlist_changed (boost::shared_ptr<ARDOUR::Diskstream>);
+ virtual void playlist_changed (boost::weak_ptr<ARDOUR::Diskstream>);
virtual void playlist_modified ();
virtual void color_handler (ColorID, uint32_t) = 0;
boost::shared_ptr<Playlist> XMLPlaylistFactory (const XMLNode&);
void playlist_length_changed ();
- void diskstream_playlist_changed (boost::shared_ptr<Diskstream>);
+ void diskstream_playlist_changed (boost::weak_ptr<Diskstream>);
/* NAMED SELECTIONS */
}
void
-Session::diskstream_playlist_changed (boost::shared_ptr<Diskstream> dstream)
+Session::diskstream_playlist_changed (boost::weak_ptr<Diskstream> wptr)
{
+ boost::shared_ptr<Diskstream> dstream = wptr.lock();
+
+ if (!dstream) {
+ return;
+
+ }
+
boost::shared_ptr<Playlist> playlist;
if ((playlist = dstream->playlist()) != 0) {
/* writer goes out of scope, copies ds back to main */
}
- dstream->PlaylistChanged.connect (sigc::bind (mem_fun (*this, &Session::diskstream_playlist_changed), dstream));
+ dstream->PlaylistChanged.connect (sigc::bind (mem_fun (*this, &Session::diskstream_playlist_changed),
+ boost::weak_ptr<Diskstream> (dstream)));
/* this will connect to future changes, and check the current length */
diskstream_playlist_changed (dstream);
dstream->prepare ();
-
}
void
boost::shared_ptr<DiskstreamList> d = dsl.get_copy();
d->remove (ds);
}
+
+ diskstreams.flush ();
}
find_current_end ();
set_dirty();
// We need to disconnect the routes inputs and outputs
- route->disconnect_inputs(NULL);
- route->disconnect_outputs(NULL);
+
+ route->disconnect_inputs (0);
+ route->disconnect_outputs (0);
/* get rid of it from the dead wood collection in the route list manager */
Track::~Track ()
{
+ if (_diskstream) {
+ _diskstream->drop_references ();
+ }
}
void