Emit SelectionChange when VCA is removed
chicken/egg: Stripable d'tor which calls remove_stripable_by_id() will only be called when the Stripable is destroyed. But as long as the GUI selection holds a shared-ptr reference to the Stripable, it won't be destroyed.
This commit is contained in:
parent
0301326656
commit
d18a43422c
@ -36,6 +36,7 @@ namespace ARDOUR {
|
|||||||
class AutomationControl;
|
class AutomationControl;
|
||||||
class Session;
|
class Session;
|
||||||
class Stripable;
|
class Stripable;
|
||||||
|
class VCAManager;
|
||||||
class PresentationInfo;
|
class PresentationInfo;
|
||||||
|
|
||||||
class LIBARDOUR_API CoreSelection : public PBD::Stateful {
|
class LIBARDOUR_API CoreSelection : public PBD::Stateful {
|
||||||
@ -76,6 +77,7 @@ class LIBARDOUR_API CoreSelection : public PBD::Stateful {
|
|||||||
protected:
|
protected:
|
||||||
friend class Stripable;
|
friend class Stripable;
|
||||||
friend class Session;
|
friend class Session;
|
||||||
|
friend class VCAManager;
|
||||||
void remove_stripable_by_id (PBD::ID const &);
|
void remove_stripable_by_id (PBD::ID const &);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include "pbd/string_convert.h"
|
#include "pbd/string_convert.h"
|
||||||
|
|
||||||
#include "ardour/boost_debug.h"
|
#include "ardour/boost_debug.h"
|
||||||
|
#include "ardour/selection.h"
|
||||||
#include "ardour/session.h"
|
#include "ardour/session.h"
|
||||||
#include "ardour/slavable.h"
|
#include "ardour/slavable.h"
|
||||||
#include "ardour/vca.h"
|
#include "ardour/vca.h"
|
||||||
@ -50,11 +51,24 @@ VCAManager::~VCAManager ()
|
|||||||
void
|
void
|
||||||
VCAManager::clear ()
|
VCAManager::clear ()
|
||||||
{
|
{
|
||||||
Mutex::Lock lm (lock);
|
bool send = false;
|
||||||
for (VCAList::const_iterator i = _vcas.begin(); i != _vcas.end(); ++i) {
|
{
|
||||||
(*i)->DropReferences ();
|
Mutex::Lock lm (lock);
|
||||||
|
for (VCAList::const_iterator i = _vcas.begin(); i != _vcas.end(); ++i) {
|
||||||
|
if ((*i)->is_selected ()) {
|
||||||
|
_session.selection().remove_stripable_by_id ((*i)->id());
|
||||||
|
send = true;
|
||||||
|
}
|
||||||
|
(*i)->DropReferences ();
|
||||||
|
}
|
||||||
|
_vcas.clear ();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (send && !_session.deletion_in_progress ()) {
|
||||||
|
PropertyChange pc;
|
||||||
|
pc.add (Properties::selected);
|
||||||
|
PresentationInfo::Change (pc);
|
||||||
}
|
}
|
||||||
_vcas.clear ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VCAList
|
VCAList
|
||||||
@ -115,6 +129,12 @@ VCAManager::remove_vca (boost::shared_ptr<VCA> vca)
|
|||||||
|
|
||||||
vca->DropReferences ();
|
vca->DropReferences ();
|
||||||
|
|
||||||
|
if (vca->is_selected () && !_session.deletion_in_progress ()) {
|
||||||
|
_session.selection().remove_stripable_by_id (vca->id());
|
||||||
|
PropertyChange pc;
|
||||||
|
pc.add (Properties::selected);
|
||||||
|
PresentationInfo::Change (pc);
|
||||||
|
}
|
||||||
_session.set_dirty ();
|
_session.set_dirty ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user