summaryrefslogtreecommitdiff
path: root/gtk2_ardour/global_port_matrix.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2009-12-05 03:04:54 +0000
committerCarl Hetherington <carl@carlh.net>2009-12-05 03:04:54 +0000
commitabd80d0f64a4b32c3a8cce01c9aa1d6bc7ee64bb (patch)
treec46721af34d296670a6da0ce87eaaac1c5208f6f /gtk2_ardour/global_port_matrix.cc
parentbdf5dead24c16e23977d4b3d2561dbb0f8a7ae4e (diff)
Clean up and comment PortMatrix event handling a bit.
Fix problems with attempts to access Session after it has been destroyed. git-svn-id: svn://localhost/ardour2/branches/3.0@6290 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/global_port_matrix.cc')
-rw-r--r--gtk2_ardour/global_port_matrix.cc22
1 files changed, 13 insertions, 9 deletions
diff --git a/gtk2_ardour/global_port_matrix.cc b/gtk2_ardour/global_port_matrix.cc
index 8f6e923bd4..327ba41b06 100644
--- a/gtk2_ardour/global_port_matrix.cc
+++ b/gtk2_ardour/global_port_matrix.cc
@@ -31,7 +31,7 @@
using namespace std;
-GlobalPortMatrix::GlobalPortMatrix (Gtk::Window* p, ARDOUR::Session& s, ARDOUR::DataType t)
+GlobalPortMatrix::GlobalPortMatrix (Gtk::Window* p, ARDOUR::Session* s, ARDOUR::DataType t)
: PortMatrix (p, s, t)
{
setup_all_ports ();
@@ -55,8 +55,8 @@ GlobalPortMatrix::set_state (ARDOUR::BundleChannel c[2], bool s)
for (ARDOUR::Bundle::PortList::const_iterator i = in_ports.begin(); i != in_ports.end(); ++i) {
for (ARDOUR::Bundle::PortList::const_iterator j = out_ports.begin(); j != out_ports.end(); ++j) {
- ARDOUR::Port* p = _session.engine().get_port_by_name (*i);
- ARDOUR::Port* q = _session.engine().get_port_by_name (*j);
+ ARDOUR::Port* p = _session->engine().get_port_by_name (*i);
+ ARDOUR::Port* q = _session->engine().get_port_by_name (*j);
if (p) {
if (s) {
@@ -73,9 +73,9 @@ GlobalPortMatrix::set_state (ARDOUR::BundleChannel c[2], bool s)
} else {
/* two non-Ardour ports */
if (s) {
- jack_connect (_session.engine().jack (), j->c_str(), i->c_str());
+ jack_connect (_session->engine().jack (), j->c_str(), i->c_str());
} else {
- jack_disconnect (_session.engine().jack (), j->c_str(), i->c_str());
+ jack_disconnect (_session->engine().jack (), j->c_str(), i->c_str());
}
}
}
@@ -85,6 +85,10 @@ GlobalPortMatrix::set_state (ARDOUR::BundleChannel c[2], bool s)
PortMatrixNode::State
GlobalPortMatrix::get_state (ARDOUR::BundleChannel c[2]) const
{
+ if (_session == 0) {
+ return PortMatrixNode::NOT_ASSOCIATED;
+ }
+
ARDOUR::Bundle::PortList const & in_ports = c[IN].bundle->channel_ports (c[IN].channel);
ARDOUR::Bundle::PortList const & out_ports = c[OUT].bundle->channel_ports (c[OUT].channel);
if (in_ports.empty() || out_ports.empty()) {
@@ -96,15 +100,15 @@ GlobalPortMatrix::get_state (ARDOUR::BundleChannel c[2]) const
for (ARDOUR::Bundle::PortList::const_iterator i = in_ports.begin(); i != in_ports.end(); ++i) {
for (ARDOUR::Bundle::PortList::const_iterator j = out_ports.begin(); j != out_ports.end(); ++j) {
- ARDOUR::Port* p = _session.engine().get_port_by_name (*i);
- ARDOUR::Port* q = _session.engine().get_port_by_name (*j);
+ ARDOUR::Port* p = _session->engine().get_port_by_name (*i);
+ ARDOUR::Port* q = _session->engine().get_port_by_name (*j);
if (!p && !q) {
/* two non-Ardour ports; things are slightly more involved */
/* XXX: is this the easiest way to do this? */
/* XXX: isn't this very inefficient? */
- jack_client_t* jack = _session.engine().jack ();
+ jack_client_t* jack = _session->engine().jack ();
jack_port_t* jp = jack_port_by_name (jack, i->c_str());
if (jp == 0) {
return PortMatrixNode::NOT_ASSOCIATED;
@@ -138,7 +142,7 @@ GlobalPortMatrix::get_state (ARDOUR::BundleChannel c[2]) const
return PortMatrixNode::ASSOCIATED;
}
-GlobalPortMatrixWindow::GlobalPortMatrixWindow (ARDOUR::Session& s, ARDOUR::DataType t)
+GlobalPortMatrixWindow::GlobalPortMatrixWindow (ARDOUR::Session* s, ARDOUR::DataType t)
: _port_matrix (this, s, t)
{
switch (t) {