summaryrefslogtreecommitdiff
path: root/libs/ardour/gain_control.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2016-03-02 12:41:27 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2016-05-31 15:30:39 -0400
commita879310349502936dc598bda35fa405475674db8 (patch)
tree49829d5769179a3b90aa1cc949616bbf09845cb5 /libs/ardour/gain_control.cc
parent3be9d6dccc41b47bb1440c8033f5bedda793761c (diff)
add VCAStatusChange message to GainControl
Diffstat (limited to 'libs/ardour/gain_control.cc')
-rw-r--r--libs/ardour/gain_control.cc22
1 files changed, 20 insertions, 2 deletions
diff --git a/libs/ardour/gain_control.cc b/libs/ardour/gain_control.cc
index c5f1f25bb7..214c2bd3d6 100644
--- a/libs/ardour/gain_control.cc
+++ b/libs/ardour/gain_control.cc
@@ -133,11 +133,12 @@ GainControl::add_master (boost::shared_ptr<VCA> vca)
{
gain_t old_master_val;
gain_t new_master_val;
+ std::pair<set<boost::shared_ptr<GainControl> >::iterator,bool> res;
{
Glib::Threads::Mutex::Lock lm (master_lock);
old_master_val = get_master_gain_locked ();
- _masters.insert (vca->control());
+ res = _masters.insert (vca->control());
_masters_numbers.insert (vca->number());
new_master_val = get_master_gain_locked ();
@@ -153,6 +154,10 @@ GainControl::add_master (boost::shared_ptr<VCA> vca)
if (old_master_val != new_master_val) {
Changed(); /* EMIT SIGNAL */
}
+
+ if (res.second) {
+ VCAStatusChange (); /* EMIT SIGNAL */
+ }
}
void
@@ -169,11 +174,12 @@ GainControl::remove_master (boost::shared_ptr<VCA> vca)
{
gain_t old_master_val;
gain_t new_master_val;
+ set<boost::shared_ptr<GainControl> >::size_type erased = 0;
{
Glib::Threads::Mutex::Lock lm (master_lock);
old_master_val = get_master_gain_locked ();
- _masters.erase (vca->control());
+ erased = _masters.erase (vca->control());
_masters_numbers.erase (vca->number());
new_master_val = get_master_gain_locked ();
}
@@ -181,6 +187,10 @@ GainControl::remove_master (boost::shared_ptr<VCA> vca)
if (old_master_val != new_master_val) {
Changed(); /* EMIT SIGNAL */
}
+
+ if (erased) {
+ VCAStatusChange (); /* EMIT SIGNAL */
+ }
}
void
@@ -188,10 +198,14 @@ GainControl::clear_masters ()
{
gain_t old_master_val;
gain_t new_master_val;
+ bool had_masters = false;
{
Glib::Threads::Mutex::Lock lm (master_lock);
old_master_val = get_master_gain_locked ();
+ if (!_masters.empty()) {
+ had_masters = true;
+ }
_masters.clear ();
_masters_numbers.clear ();
new_master_val = get_master_gain_locked ();
@@ -200,6 +214,10 @@ GainControl::clear_masters ()
if (old_master_val != new_master_val) {
Changed(); /* EMIT SIGNAL */
}
+
+ if (had_masters) {
+ VCAStatusChange (); /* EMIT SIGNAL */
+ }
}
bool