summaryrefslogtreecommitdiff
path: root/libs/surfaces/osc/osc_select_observer.cc
diff options
context:
space:
mode:
authorLen Ovens <len@ovenwerks.net>2016-06-22 14:10:59 -0700
committerLen Ovens <len@ovenwerks.net>2016-06-22 14:10:59 -0700
commit844bf700021bc9e41a6c27e1988fe4d520747844 (patch)
tree916719a5a7d78fdea28a30799e11917db85156d9 /libs/surfaces/osc/osc_select_observer.cc
parentdd549bb09eb43cf88737595748e8f5185870e214 (diff)
OSC: Fix math off by one, Check for all stripable controls because VCAs have less (crash fix)
Diffstat (limited to 'libs/surfaces/osc/osc_select_observer.cc')
-rw-r--r--libs/surfaces/osc/osc_select_observer.cc61
1 files changed, 35 insertions, 26 deletions
diff --git a/libs/surfaces/osc/osc_select_observer.cc b/libs/surfaces/osc/osc_select_observer.cc
index 8b0c6f4f06..831cb815c5 100644
--- a/libs/surfaces/osc/osc_select_observer.cc
+++ b/libs/surfaces/osc/osc_select_observer.cc
@@ -58,16 +58,20 @@ OSCSelectObserver::OSCSelectObserver (boost::shared_ptr<Stripable> s, lo_address
_strip->solo_control()->Changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::change_message, this, X_("/select/solo"), _strip->solo_control()), OSC::instance());
change_message ("/select/solo", _strip->solo_control());
- _strip->solo_isolate_control()->Changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::change_message, this, X_("/select/solo_iso"), _strip->solo_isolate_control()), OSC::instance());
- change_message ("/select/solo_iso", _strip->solo_isolate_control());
+ if (_strip->solo_isolate_control()) {
+ _strip->solo_isolate_control()->Changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::change_message, this, X_("/select/solo_iso"), _strip->solo_isolate_control()), OSC::instance());
+ change_message ("/select/solo_iso", _strip->solo_isolate_control());
+ }
- _strip->solo_safe_control()->Changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::change_message, this, X_("/select/solo_safe"), _strip->solo_safe_control()), OSC::instance());
- change_message ("/select/solo_safe", _strip->solo_safe_control());
+ if (_strip->solo_safe_control()) {
+ _strip->solo_safe_control()->Changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::change_message, this, X_("/select/solo_safe"), _strip->solo_safe_control()), OSC::instance());
+ change_message ("/select/solo_safe", _strip->solo_safe_control());
+ }
boost::shared_ptr<Track> track = boost::dynamic_pointer_cast<Track> (_strip);
if (track) {
- track->monitoring_control()->Changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::monitor_status, this, track->monitoring_control()), OSC::instance());
- monitor_status (track->monitoring_control());
+ track->monitoring_control()->Changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::monitor_status, this, track->monitoring_control()), OSC::instance());
+ monitor_status (track->monitoring_control());
}
boost::shared_ptr<AutomationControl> rec_controllable = _strip->rec_enable_control ();
@@ -119,8 +123,11 @@ OSCSelectObserver::OSCSelectObserver (boost::shared_ptr<Stripable> s, lo_address
// detecting processor changes requires cast to route
boost::shared_ptr<Route> r = boost::dynamic_pointer_cast<Route>(_strip);
- r->processors_changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::send_restart, this, -1), OSC::instance());
- send_init();
+ if (r) {
+ r->processors_changed.connect (strip_connections, MISSING_INVALIDATOR, boost::bind (&OSCSelectObserver::send_restart, this, -1), OSC::instance());
+ send_init();
+ }
+
}
tick();
}
@@ -340,26 +347,28 @@ OSCSelectObserver::name_changed (const PBD::PropertyChange& what_changed)
lo_send_message (addr, path.c_str(), msg);
lo_message_free (msg);
- //spit out the comment at the same time
- msg = lo_message_new ();
- path = "/select/comment";
boost::shared_ptr<Route> route = boost::dynamic_pointer_cast<Route> (_strip);
- lo_message_add_string (msg, route->comment().c_str());
- lo_send_message (addr, path.c_str(), msg);
- lo_message_free (msg);
+ if (route) {
+ //spit out the comment at the same time
+ msg = lo_message_new ();
+ path = "/select/comment";
+ lo_message_add_string (msg, route->comment().c_str());
+ lo_send_message (addr, path.c_str(), msg);
+ lo_message_free (msg);
- // lets tell the surface how many inputs this strip has
- msg = lo_message_new ();
- path = "/select/n_inputs";
- lo_message_add_int32 (msg, route->n_inputs().n_total());
- lo_send_message (addr, path.c_str(), msg);
- lo_message_free (msg);
- // lets tell the surface how many outputs this strip has
- msg = lo_message_new ();
- path = "/select/n_outputs";
- lo_message_add_int32 (msg, route->n_outputs().n_total());
- lo_send_message (addr, path.c_str(), msg);
- lo_message_free (msg);
+ // lets tell the surface how many inputs this strip has
+ msg = lo_message_new ();
+ path = "/select/n_inputs";
+ lo_message_add_int32 (msg, route->n_inputs().n_total());
+ lo_send_message (addr, path.c_str(), msg);
+ lo_message_free (msg);
+ // lets tell the surface how many outputs this strip has
+ msg = lo_message_new ();
+ path = "/select/n_outputs";
+ lo_message_add_int32 (msg, route->n_outputs().n_total());
+ lo_send_message (addr, path.c_str(), msg);
+ lo_message_free (msg);
+ }
}