MuteControl::get_value () const
{
if (slaved ()) {
- return muted_by_self() || get_masters_value ();
+ return muted_by_self() || muted_by_masters ();
}
if (_list && boost::dynamic_pointer_cast<AutomationList>(_list)->automation_playback()) {
Control, or the Muteable that we sort-of proxy for. Since this
method is called by ::get_value(), use the latter to avoid recursion.
*/
- return _muteable.mute_master()->muted_by_self() || get_masters_value ();
+ return _muteable.mute_master()->muted_by_self() || muted_by_masters ();
}
bool
bool
MuteControl::muted_by_masters () const
{
- return get_masters_value ();
+ return _muteable.mute_master()->muted_by_masters ();
}
bool
}
void
-MuteControl::automation_run (framepos_t start, pframes_t len)
+MuteControl::automation_run (samplepos_t start, pframes_t len)
{
boolean_automation_run (start, len);
- if (muted_by_masters ()) {
- // already muted, no need to check further
- return;
- }
-
bool valid = false;
bool mute = false;
return;
}
+ if (muted_by_masters ()) {
+ /* already muted, no need to check further,
+ * except we need to up update implicit/explict mute
+ */
+ if (muted_by_self () != mute) {
+ set_value_unchecked (mute ? 1. : 0.);
+ Changed (false, Controllable::NoGroup); /* EMIT SIGNAL */
+ }
+ return;
+ }
+
if (mute && !muted()) {
set_value_unchecked (1.0); // mute
Changed (false, Controllable::NoGroup); /* EMIT SIGNAL */