From 68d26ffee95d3dc25be2cc3e5bba7c886864c293 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 24 Feb 2021 00:21:44 +0100 Subject: [PATCH] Relax A5 style exclusive In/Disk monitoring This allows "All In" and "All Disk" to be selected simultaneously. --- gtk2_ardour/ardour_ui_options.cc | 39 +++++++++++--------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index b53eb63f52..158d92d6c6 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -140,37 +140,35 @@ void ARDOUR_UI::toggle_session_monitoring_in () { Glib::RefPtr tact = ActionManager::get_toggle_action (X_("Transport"), X_("SessionMonitorIn")); + MonitorChoice mc = _session->config.get_session_monitoring (); - if (tact->get_active() && _session->config.get_session_monitoring () == MonitorInput) { - return; - } - if (!tact->get_active() && _session->config.get_session_monitoring () != MonitorInput) { + if (tact->get_active() == (0 != (mc & MonitorInput))) { return; } if (tact->get_active()) { - _session->config.set_session_monitoring (MonitorInput); + mc = MonitorChoice (mc | MonitorInput); } else { - _session->config.set_session_monitoring (MonitorAuto); + mc = MonitorChoice (mc & ~MonitorInput); } + _session->config.set_session_monitoring (mc); } void ARDOUR_UI::toggle_session_monitoring_disk () { Glib::RefPtr tact = ActionManager::get_toggle_action (X_("Transport"), X_("SessionMonitorDisk")); - if (tact->get_active() && _session->config.get_session_monitoring () == MonitorDisk) { - return; - } - if (!tact->get_active() && _session->config.get_session_monitoring () != MonitorDisk) { + MonitorChoice mc = _session->config.get_session_monitoring (); + if (tact->get_active() == (0 != (mc & MonitorDisk))) { return; } if (tact->get_active()) { - _session->config.set_session_monitoring (MonitorDisk); + mc = MonitorChoice (mc | MonitorDisk); } else { - _session->config.set_session_monitoring (MonitorAuto); + mc = MonitorChoice (mc & ~MonitorDisk); } + _session->config.set_session_monitoring (mc); } void @@ -357,20 +355,9 @@ ARDOUR_UI::parameter_changed (std::string p) } else if (p == "session-monitoring") { Glib::RefPtr tiact = ActionManager::get_toggle_action (X_("Transport"), X_("SessionMonitorIn")); Glib::RefPtr tdact = ActionManager::get_toggle_action (X_("Transport"), X_("SessionMonitorDisk")); - switch (_session->config.get_session_monitoring ()) { - case MonitorDisk: - tdact->set_active (true); - tiact->set_active (false); - break; - case MonitorInput: - tiact->set_active (true); - tdact->set_active (false); - break; - default: - tdact->set_active (false); - tiact->set_active (false); - break; - } + MonitorChoice mc = _session->config.get_session_monitoring (); + tiact->set_active (0 != (mc & MonitorInput)); + tdact->set_active (0 != (mc & MonitorDisk)); } else if (p == "punch-out") { ActionManager::map_some_state ("Transport", "TogglePunchOut", sigc::mem_fun (_session->config, &SessionConfiguration::get_punch_out)); if (!_session->config.get_punch_out()) {