diff --git a/Timeline/Annotation_Sequence.H b/Timeline/Annotation_Sequence.H index c404ac2..d1e8cbc 100644 --- a/Timeline/Annotation_Sequence.H +++ b/Timeline/Annotation_Sequence.H @@ -83,6 +83,8 @@ public: ~Annotation_Sequence ( ) { + track()->remove( this ); + log_destroy(); } diff --git a/Timeline/Audio_Sequence.C b/Timeline/Audio_Sequence.C index 24a63ed..5f77598 100644 --- a/Timeline/Audio_Sequence.C +++ b/Timeline/Audio_Sequence.C @@ -49,6 +49,8 @@ Audio_Sequence::Audio_Sequence ( Track *track ) : Sequence( track ) Audio_Sequence::~Audio_Sequence ( ) { + track()->remove( this ); + log_destroy(); } diff --git a/Timeline/Control_Sequence.C b/Timeline/Control_Sequence.C index 52e28fe..e32fe29 100644 --- a/Timeline/Control_Sequence.C +++ b/Timeline/Control_Sequence.C @@ -25,6 +25,7 @@ using namespace std; #include "Track.H" #include "Engine/Port.H" +#include "Engine/Engine.H" // for lock() #include "Transport.H" // for transport->frame bool Control_Sequence::draw_with_gradient = true; @@ -50,9 +51,19 @@ Control_Sequence::~Control_Sequence ( ) { log_destroy(); + engine->lock(); + + track()->remove( this ); + + engine->unlock(); + _output->shutdown(); delete _output; + + _output = NULL; + + log_destroy(); } void diff --git a/Timeline/Sequence.C b/Timeline/Sequence.C index fad7434..4f06472 100644 --- a/Timeline/Sequence.C +++ b/Timeline/Sequence.C @@ -75,10 +75,6 @@ Sequence::~Sequence ( ) } _widgets.clear(); - - parent()->redraw(); - parent()->remove( this ); -// log_destroy(); } nframes_t diff --git a/Timeline/Track.C b/Timeline/Track.C index dd03ce2..8915e44 100644 --- a/Timeline/Track.C +++ b/Timeline/Track.C @@ -354,13 +354,25 @@ Track::add ( Audio_Sequence * t ) void Track::remove ( Audio_Sequence *t ) { + timeline->wrlock(); + takes->remove( t ); + timeline->unlock(); + resize(); // take_menu->remove( t->name() ); } +void +Track::remove ( Annotation_Sequence *t ) +{ + annotation->remove( t ); + + resize(); +} + void Track::remove ( Control_Sequence *t ) { @@ -371,8 +383,6 @@ Track::remove ( Control_Sequence *t ) engine->unlock(); resize(); - - redraw(); } void