summaryrefslogtreecommitdiff
path: root/gtk2_ardour/midi_tracer.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2013-08-13 13:24:05 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2013-08-13 13:24:05 -0400
commite87424f514d9c8bfbd9851ce338061d693464363 (patch)
tree98c4156f9e78e3b2801dcad16dd0a37d6dc1da57 /gtk2_ardour/midi_tracer.cc
parenta5a75d5e0d4fb9f2c7db7cf3747da2314c2f9586 (diff)
re-enable MIDI tracing for ARDOUR::MidiPort
Diffstat (limited to 'gtk2_ardour/midi_tracer.cc')
-rw-r--r--gtk2_ardour/midi_tracer.cc21
1 files changed, 15 insertions, 6 deletions
diff --git a/gtk2_ardour/midi_tracer.cc b/gtk2_ardour/midi_tracer.cc
index fee339d126..ba116d39aa 100644
--- a/gtk2_ardour/midi_tracer.cc
+++ b/gtk2_ardour/midi_tracer.cc
@@ -164,16 +164,25 @@ MidiTracer::port_changed ()
return;
}
+ /* The inheritance heirarchy makes this messy. AsyncMIDIPort has two
+ * available MIDI::Parsers what we could connect to, ::self_parser()
+ * (from ARDOUR::MidiPort) and ::parser() from MIDI::Port. One day,
+ * this mess will all go away ...
+ */
+
boost::shared_ptr<AsyncMIDIPort> async = boost::dynamic_pointer_cast<AsyncMIDIPort> (p);
if (!async) {
- /* pure ARDOUR::MidiPort ... cannot currently attach to it because it
- * has no Parser.
- */
- return;
+
+ boost::shared_ptr<ARDOUR::MidiPort> mp = boost::dynamic_pointer_cast<ARDOUR::MidiPort> (p);
+
+ if (mp) {
+ mp->self_parser().any.connect_same_thread (_parser_connection, boost::bind (&MidiTracer::tracer, this, _1, _2, _3));
+ }
+
+ } else {
+ async->parser()->any.connect_same_thread (_parser_connection, boost::bind (&MidiTracer::tracer, this, _1, _2, _3));
}
-
- async->parser()->any.connect_same_thread (_parser_connection, boost::bind (&MidiTracer::tracer, this, _1, _2, _3));
}
void