diff options
-rw-r--r-- | gtk2_ardour/editor_mixer.cc | 31 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 3 | ||||
-rw-r--r-- | libs/surfaces/osc/osc.cc | 2 |
3 files changed, 20 insertions, 16 deletions
diff --git a/gtk2_ardour/editor_mixer.cc b/gtk2_ardour/editor_mixer.cc index 0109aa38c1..67b33a6c87 100644 --- a/gtk2_ardour/editor_mixer.cc +++ b/gtk2_ardour/editor_mixer.cc @@ -197,21 +197,6 @@ Editor::set_selected_mixer_strip (TimeAxisView& view) return; } - Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (X_("Editor"), X_("show-editor-mixer")); - - if (act) { - Glib::RefPtr<Gtk::ToggleAction> tact = Glib::RefPtr<Gtk::ToggleAction>::cast_dynamic(act); - if (!tact || !tact->get_active()) { - /* not showing mixer strip presently */ - return; - } - } - - if (current_mixer_strip == 0) { - create_editor_mixer (); - } - - // if this is an automation track, then we shold the mixer strip should // show the parent @@ -240,6 +225,22 @@ Editor::set_selected_mixer_strip (TimeAxisView& view) } } + _session->set_editor_mixer (route); + + Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (X_("Editor"), X_("show-editor-mixer")); + + if (act) { + Glib::RefPtr<Gtk::ToggleAction> tact = Glib::RefPtr<Gtk::ToggleAction>::cast_dynamic(act); + if (!tact || !tact->get_active()) { + /* not showing mixer strip presently */ + return; + } + } + + if (current_mixer_strip == 0) { + create_editor_mixer (); + } + if (current_mixer_strip->route() == route) { return; } diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index ebafdd82f6..6c3d869013 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -818,6 +818,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop boost::shared_ptr<Route> monitor_out() const { return _monitor_out; } boost::shared_ptr<Route> master_out() const { return _master_out; } + boost::weak_ptr<Route> get_editor_mixer() const { return _editor_mixer; } + void set_editor_mixer (boost::weak_ptr<Route> r) { _editor_mixer = r; } void globally_add_internal_sends (boost::shared_ptr<Route> dest, Placement p, bool); void globally_set_send_gains_from_track (boost::shared_ptr<Route> dest); @@ -1867,6 +1869,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop boost::shared_ptr<Route> _master_out; boost::shared_ptr<Route> _monitor_out; + boost::weak_ptr<Route> _editor_mixer; void auto_connect_master_bus (); diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index a32e215290..57eb6c0f7a 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -2617,7 +2617,7 @@ OSC::gui_selection_changed (StripableNotificationListPtr stripables) boost::shared_ptr<Stripable> strip; if (!stripables->empty()) { - strip = stripables->front().lock(); + strip = boost::dynamic_pointer_cast<Stripable>(session->get_editor_mixer().lock()); } if (strip) { for (uint32_t it = 0; it < _surface.size(); ++it) { |