summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/monitor_section.cc14
-rw-r--r--gtk2_ardour/monitor_section.h2
2 files changed, 16 insertions, 0 deletions
diff --git a/gtk2_ardour/monitor_section.cc b/gtk2_ardour/monitor_section.cc
index 5937ca018c..7de31e7d41 100644
--- a/gtk2_ardour/monitor_section.cc
+++ b/gtk2_ardour/monitor_section.cc
@@ -45,6 +45,7 @@ MonitorSection::MonitorSection (Session* s)
, pfl_button (_("PFL"), ArdourButton::led_default_elements)
, exclusive_solo_button (ArdourButton::led_default_elements)
, solo_mute_override_button (ArdourButton::led_default_elements)
+ , _inhibit_solo_model_update (false)
{
Glib::RefPtr<Action> act;
@@ -728,7 +729,16 @@ MonitorSection::solo_use_in_place ()
if (act) {
Glib::RefPtr<RadioAction> ract = Glib::RefPtr<RadioAction>::cast_dynamic (act);
if (ract) {
+ if (!ract->get_active ()) {
+ /* We are turning SiP off, which means that AFL or PFL will be turned on
+ shortly; don't update the solo model in the mean time, as if the currently
+ configured listen position is not the one that is about to be turned on,
+ things will go wrong.
+ */
+ _inhibit_solo_model_update = true;
+ }
Config->set_solo_control_is_listen_control (!ract->get_active());
+ _inhibit_solo_model_update = false;
}
}
}
@@ -815,6 +825,10 @@ MonitorSection::setup_knob_images ()
void
MonitorSection::update_solo_model ()
{
+ if (_inhibit_solo_model_update) {
+ return;
+ }
+
const char* action_name = 0;
Glib::RefPtr<Action> act;
diff --git a/gtk2_ardour/monitor_section.h b/gtk2_ardour/monitor_section.h
index f8a553b7e8..185720856b 100644
--- a/gtk2_ardour/monitor_section.h
+++ b/gtk2_ardour/monitor_section.h
@@ -135,5 +135,7 @@ class MonitorSection : public RouteUI
PBD::ScopedConnection config_connection;
PBD::ScopedConnectionList control_connections;
+ bool _inhibit_solo_model_update;
+
void assign_controllables ();
};