summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2020-05-15 21:06:40 -0600
committerPaul Davis <paul@linuxaudiosystems.com>2020-05-15 21:06:40 -0600
commita9fff59229baba194fce20a2dfd0e9cc16c100d2 (patch)
tree11b3560b132365b6a1c6c8298dbd27051502ec12 /gtk2_ardour
parentc57df5a7e55b947d27f847f49dc278144614052f (diff)
TMM: do not allow changing transport master while slaved (GUI edition)
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/transport_masters_dialog.cc25
-rw-r--r--gtk2_ardour/transport_masters_dialog.h4
2 files changed, 29 insertions, 0 deletions
diff --git a/gtk2_ardour/transport_masters_dialog.cc b/gtk2_ardour/transport_masters_dialog.cc
index bb6c6d618e..bf1bb16bf6 100644
--- a/gtk2_ardour/transport_masters_dialog.cc
+++ b/gtk2_ardour/transport_masters_dialog.cc
@@ -715,6 +715,19 @@ TransportMastersWindow::set_session (ARDOUR::Session* s)
w.set_session (s);
}
+void
+TransportMastersWidget::set_session (ARDOUR::Session* s)
+{
+ session_config_connection.disconnect ();
+
+ SessionHandlePtr::set_session (s);
+
+ if (_session) {
+ _session->config.ParameterChanged.connect (session_config_connection, invalidator (*this), boost::bind (&TransportMastersWidget::param_changed, this, _1), gui_context());
+ allow_master_select (!_session->config.get_external_sync());
+ }
+}
+
TransportMastersWidget::AddTransportMasterDialog::AddTransportMasterDialog ()
: ArdourDialog (_("Add Transport Master"), true, false)
, name_label (_("Name"))
@@ -791,5 +804,17 @@ TransportMastersWidget::param_changed (string const & p)
{
if (p == "transport-masters-just_roll-when-sync-lost") {
lost_sync_changed ();
+ } else if (p == "external-sync") {
+ if (_session) {
+ allow_master_select (!_session->config.get_external_sync());
+ }
+ }
+}
+
+void
+TransportMastersWidget::allow_master_select (bool yn)
+{
+ for (vector<Row*>::iterator r = rows.begin(); r != rows.end(); ++r) {
+ (*r)->use_button.set_sensitive (yn);
}
}
diff --git a/gtk2_ardour/transport_masters_dialog.h b/gtk2_ardour/transport_masters_dialog.h
index df61fa92fa..0970be4951 100644
--- a/gtk2_ardour/transport_masters_dialog.h
+++ b/gtk2_ardour/transport_masters_dialog.h
@@ -53,6 +53,8 @@ class TransportMastersWidget : public Gtk::VBox, public ARDOUR::SessionHandlePtr
void update (ARDOUR::samplepos_t);
void set_transport_master (boost::shared_ptr<ARDOUR::TransportMaster>);
+ void set_session (ARDOUR::Session*);
+
protected:
void on_map ();
void on_unmap ();
@@ -166,11 +168,13 @@ class TransportMastersWidget : public Gtk::VBox, public ARDOUR::SessionHandlePtr
void current_changed (boost::shared_ptr<ARDOUR::TransportMaster> old_master, boost::shared_ptr<ARDOUR::TransportMaster> new_master);
bool add_master (GdkEventButton* ev);
void update_usability ();
+ void allow_master_select (bool);
void lost_sync_changed ();
void lost_sync_button_toggled ();
void param_changed (std::string const &);
PBD::ScopedConnection config_connection;
+ PBD::ScopedConnection session_config_connection;
public:
bool idle_remove (Row*);