summaryrefslogtreecommitdiff
path: root/libs/ardour/vca_manager.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-08-06 22:12:20 +0200
committerRobin Gareus <robin@gareus.org>2017-08-06 22:17:05 +0200
commitd18a43422c531c7c4ecc19cf480890192f90aa9e (patch)
treed4ab08489f8644d90b171bd10a73ac8902bc239b /libs/ardour/vca_manager.cc
parent0301326656b838ee7d11f6c1b068ab5bd15a99ee (diff)
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.
Diffstat (limited to 'libs/ardour/vca_manager.cc')
-rw-r--r--libs/ardour/vca_manager.cc28
1 files changed, 24 insertions, 4 deletions
diff --git a/libs/ardour/vca_manager.cc b/libs/ardour/vca_manager.cc
index 32ff461f1f..f8b566ecaf 100644
--- a/libs/ardour/vca_manager.cc
+++ b/libs/ardour/vca_manager.cc
@@ -22,6 +22,7 @@
#include "pbd/string_convert.h"
#include "ardour/boost_debug.h"
+#include "ardour/selection.h"
#include "ardour/session.h"
#include "ardour/slavable.h"
#include "ardour/vca.h"
@@ -50,11 +51,24 @@ VCAManager::~VCAManager ()
void
VCAManager::clear ()
{
- Mutex::Lock lm (lock);
- for (VCAList::const_iterator i = _vcas.begin(); i != _vcas.end(); ++i) {
- (*i)->DropReferences ();
+ bool send = false;
+ {
+ 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
@@ -115,6 +129,12 @@ VCAManager::remove_vca (boost::shared_ptr<VCA> vca)
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 ();
}