summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-12-09 21:34:31 +0000
committerCarl Hetherington <carl@carlh.net>2010-12-09 21:34:31 +0000
commit7d4e03e28e58a9315f163738f35559f57b099d37 (patch)
tree37b39ea5e40835a918a77845b01fb4ab1515ba66 /libs/ardour/ardour
parentebf3762fa91d911af411f1b5c68e3c67f2c47170 (diff)
Use a weak_ptr rather than a bald pointer for _midi_source in MidiModel.
git-svn-id: svn://localhost/ardour2/branches/3.0@8228 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r--libs/ardour/ardour/midi_model.h8
-rw-r--r--libs/ardour/ardour/midi_source.h3
2 files changed, 6 insertions, 5 deletions
diff --git a/libs/ardour/ardour/midi_model.h b/libs/ardour/ardour/midi_model.h
index e959535a36..27ffa4d8a2 100644
--- a/libs/ardour/ardour/midi_model.h
+++ b/libs/ardour/ardour/midi_model.h
@@ -51,7 +51,7 @@ class MidiModel : public AutomatableSequence<Evoral::MusicalTime> {
public:
typedef Evoral::MusicalTime TimeType;
- MidiModel(MidiSource* s);
+ MidiModel (boost::shared_ptr<MidiSource>);
NoteMode note_mode() const { return (percussive() ? Percussive : Sustained); }
void set_note_mode(NoteMode mode) { set_percussive(mode == Percussive); };
@@ -140,8 +140,8 @@ public:
PBD::Signal0<void> ContentsChanged;
- const MidiSource* midi_source() const { return _midi_source; }
- void set_midi_source (MidiSource *);
+ boost::shared_ptr<const MidiSource> midi_source ();
+ void set_midi_source (boost::shared_ptr<MidiSource>);
boost::shared_ptr<Evoral::Note<TimeType> > find_note (NotePtr);
boost::shared_ptr<Evoral::Note<TimeType> > find_note (gint note_id);
@@ -181,7 +181,7 @@ private:
PBD::ScopedConnectionList _midi_source_connections;
// We cannot use a boost::shared_ptr here to avoid a retain cycle
- MidiSource* _midi_source;
+ boost::weak_ptr<MidiSource> _midi_source;
InsertMergePolicy _insert_merge_policy;
};
diff --git a/libs/ardour/ardour/midi_source.h b/libs/ardour/ardour/midi_source.h
index e40ccff291..33a0c3c1fa 100644
--- a/libs/ardour/ardour/midi_source.h
+++ b/libs/ardour/ardour/midi_source.h
@@ -23,6 +23,7 @@
#include <string>
#include <time.h>
#include <glibmm/thread.h>
+#include <boost/enable_shared_from_this.hpp>
#include "pbd/stateful.h"
#include "pbd/xml++.h"
#include "evoral/Sequence.hpp"
@@ -38,7 +39,7 @@ class MidiModel;
template<typename T> class MidiRingBuffer;
/** Source for MIDI data */
-class MidiSource : virtual public Source
+class MidiSource : virtual public Source, public boost::enable_shared_from_this<MidiSource>
{
public:
typedef double TimeType;