set first selected stripable for control protocols before they are instantiated
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 9 Jun 2017 21:54:10 +0000 (17:54 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 9 Jun 2017 21:55:11 +0000 (17:55 -0400)
libs/ardour/control_protocol_manager.cc

index 2f4b187fec0f9f15cf36e293dcf645ed0823d942..b510bd5aa7da6220a36765ea74b7ce36c93fb6e6 100644 (file)
@@ -32,7 +32,8 @@
 #include "ardour/control_protocol_manager.h"
 
 #include "ardour/search_paths.h"
-
+#include "ardour/selection.h"
+#include "ardour/session.h"
 
 using namespace ARDOUR;
 using namespace std;
@@ -87,8 +88,25 @@ ControlProtocolManager::set_session (Session* s)
        SessionHandlePtr::set_session (s);
 
        if (_session) {
+
+               /* get selection info and set it before instantiating any
+                * control protocols.
+                */
+
+               CoreSelection::StripableAutomationControls sac;
+               _session->selection().get_stripables (sac);
+
+               for (CoreSelection::StripableAutomationControls::iterator i = sac.begin(); i != sac.end(); ++i) {
+                       if ((*i).stripable) {
+                               cerr << "First selected being set to " << (*i).stripable->name() << endl;
+                               ControlProtocol::set_first_selected_stripable ((*i).stripable);
+                               break;
+                       }
+               }
+
                Glib::Threads::RWLock::ReaderLock lm (protocols_lock);
 
+
                for (list<ControlProtocolInfo*>::iterator i = control_protocol_info.begin(); i != control_protocol_info.end(); ++i) {
                        if ((*i)->requested || (*i)->mandatory) {
                                (void) activate (**i);