From cc4e4ffe40446a851ff14a0f9f5ad934bd70cc46 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 24 Apr 2007 19:41:13 +0000 Subject: [PATCH] bind() call involving shared_ptr fixed git-svn-id: svn://localhost/ardour2/trunk@1741 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/audio_streamview.cc | 16 +++++++++++++++- gtk2_ardour/audio_streamview.h | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index 14036bc569..279130ad38 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -290,13 +290,27 @@ AudioStreamView::playlist_changed (boost::shared_ptr ds) playlist_connections.push_back (apl->NewCrossfade.connect (mem_fun (*this, &AudioStreamView::add_crossfade))); } +void +AudioStreamView::add_crossfade_weak (boost::weak_ptr crossfade) +{ + boost::shared_ptr sp (crossfade.lock()); + + if (!sp) { + 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 (bind (mem_fun (*this, &AudioStreamView::add_crossfade), crossfade)); + ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::add_crossfade_weak), boost::weak_ptr (crossfade))); /* first see if we already have a CrossfadeView for this Crossfade */ diff --git a/gtk2_ardour/audio_streamview.h b/gtk2_ardour/audio_streamview.h index 893622116f..12d400bebd 100644 --- a/gtk2_ardour/audio_streamview.h +++ b/gtk2_ardour/audio_streamview.h @@ -94,6 +94,7 @@ class AudioStreamView : public StreamView void playlist_changed (boost::shared_ptr); void add_crossfade (boost::shared_ptr); + void add_crossfade_weak (boost::weak_ptr); void remove_crossfade (boost::shared_ptr); void color_handler (ColorID id, uint32_t val);