bind() call involving shared_ptr<Crossfade> fixed
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 24 Apr 2007 19:41:13 +0000 (19:41 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 24 Apr 2007 19:41:13 +0000 (19:41 +0000)
git-svn-id: svn://localhost/ardour2/trunk@1741 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/audio_streamview.cc
gtk2_ardour/audio_streamview.h

index 14036bc569c3603e23f537a95491ae2cb6239bdd..279130ad381ee919573249401c945e751f199293 100644 (file)
@@ -290,13 +290,27 @@ AudioStreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
                playlist_connections.push_back (apl->NewCrossfade.connect (mem_fun (*this, &AudioStreamView::add_crossfade)));
 }
 
+void
+AudioStreamView::add_crossfade_weak (boost::weak_ptr<Crossfade> crossfade)
+{
+       boost::shared_ptr<Crossfade> sp (crossfade.lock());
+
+       if (!sp) {
+               return;
+       }
+
+       add_crossfade (sp);
+}
+
 void
 AudioStreamView::add_crossfade (boost::shared_ptr<Crossfade> crossfade)
 {
        AudioRegionView* lview = 0;
        AudioRegionView* rview = 0;
+
+       /* we do not allow shared_ptr<T> to be bound to slots */
        
-       ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::add_crossfade), crossfade));
+       ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::add_crossfade_weak), boost::weak_ptr<Crossfade> (crossfade)));
 
        /* first see if we already have a CrossfadeView for this Crossfade */
 
index 893622116f02ae6f289d7a05f8a8fb6fc0a0646d..12d400bebdbce42abbe6abf80ffbfc044dd8c696 100644 (file)
@@ -94,6 +94,7 @@ class AudioStreamView : public StreamView
        void playlist_changed (boost::shared_ptr<ARDOUR::Diskstream>);
 
        void add_crossfade (boost::shared_ptr<ARDOUR::Crossfade>);
+       void add_crossfade_weak (boost::weak_ptr<ARDOUR::Crossfade>);
        void remove_crossfade (boost::shared_ptr<ARDOUR::Crossfade>);
 
        void color_handler (ColorID id, uint32_t val);