From a373e4cfc80cfc1dc712ecdf8013c18286ce2a6b Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Sun, 3 Jul 2016 18:22:09 -0700 Subject: [PATCH] UI: Add editor_mixer route pointer to session so all UIs can know the same current_strip even in a selected group. --- gtk2_ardour/editor_mixer.cc | 31 ++++++++++++++++--------------- libs/ardour/ardour/session.h | 3 +++ 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 act = ActionManager::get_action (X_("Editor"), X_("show-editor-mixer")); - - if (act) { - Glib::RefPtr tact = Glib::RefPtr::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 act = ActionManager::get_action (X_("Editor"), X_("show-editor-mixer")); + + if (act) { + Glib::RefPtr tact = Glib::RefPtr::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 monitor_out() const { return _monitor_out; } boost::shared_ptr master_out() const { return _master_out; } + boost::weak_ptr get_editor_mixer() const { return _editor_mixer; } + void set_editor_mixer (boost::weak_ptr r) { _editor_mixer = r; } void globally_add_internal_sends (boost::shared_ptr dest, Placement p, bool); void globally_set_send_gains_from_track (boost::shared_ptr dest); @@ -1867,6 +1869,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop boost::shared_ptr _master_out; boost::shared_ptr _monitor_out; + boost::weak_ptr _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 strip; if (!stripables->empty()) { - strip = stripables->front().lock(); + strip = boost::dynamic_pointer_cast(session->get_editor_mixer().lock()); } if (strip) { for (uint32_t it = 0; it < _surface.size(); ++it) {