Use weak-ptr for source added/removed signals (2/2)
authorRobin Gareus <robin@gareus.org>
Wed, 25 Dec 2019 17:00:57 +0000 (18:00 +0100)
committerRobin Gareus <robin@gareus.org>
Wed, 25 Dec 2019 17:00:57 +0000 (18:00 +0100)
gtk2_ardour/editor_sources.cc
gtk2_ardour/editor_sources.h

index 73818435f9da6e0e5c7795a6094b6dcbda55c2bd..29043c478f61b49c3589f16950f206e4e2e2b3dd 100644 (file)
@@ -287,7 +287,7 @@ EditorSources::set_session (ARDOUR::Session* s)
                
                ARDOUR::RegionFactory::CheckNewRegion.connect (add_source_connection, MISSING_INVALIDATOR, boost::bind (&EditorSources::add_source, this, _1), gui_context());
 
-               s->SourceRemoved.connect (remove_source_connection, MISSING_INVALIDATOR, boost::bind (&EditorSources::remove_source, this, _1), gui_context());
+               s->SourceRemoved.connect (remove_source_connection, MISSING_INVALIDATOR, boost::bind (&EditorSources::remove_weak_source, this, _1), gui_context());
 
                redisplay();
 
@@ -296,6 +296,15 @@ EditorSources::set_session (ARDOUR::Session* s)
        }
 }
 
+void
+EditorSources::remove_weak_source (boost::weak_ptr<ARDOUR::Source> src)
+{
+       boost::shared_ptr<ARDOUR::Source> source = src.lock();
+       if (source) {
+               remove_source (source);
+       }
+}
+
 void
 EditorSources::remove_source (boost::shared_ptr<ARDOUR::Source> source)
 {
index 109ba82b3bd2e8d6262a8f797a498b43b60a8c7c..72550069e6446a529bbb154d6d42cc69a3113d61 100644 (file)
@@ -120,6 +120,7 @@ private:
 
        void add_source (boost::shared_ptr<ARDOUR::Region>);
        void remove_source (boost::shared_ptr<ARDOUR::Source>);
+       void remove_weak_source (boost::weak_ptr<ARDOUR::Source>);
 
        void clock_format_changed ();