From 4cab367b3152c4924a690926e3ad4f39139f3688 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 2 Nov 2011 00:10:27 +0000 Subject: Re-allow adding ports to empty bundles (#4408), and fix disassociation (disconnection) menu options as well. git-svn-id: svn://localhost/ardour2/branches/3.0@10388 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/port_matrix.cc | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'gtk2_ardour/port_matrix.cc') diff --git a/gtk2_ardour/port_matrix.cc b/gtk2_ardour/port_matrix.cc index 7125780ccf..576b8789ca 100644 --- a/gtk2_ardour/port_matrix.cc +++ b/gtk2_ardour/port_matrix.cc @@ -387,13 +387,6 @@ PortMatrix::popup_menu (BundleChannel column, BundleChannel row, uint32_t t) { using namespace Menu_Helpers; - if ((row.bundle && row.bundle->nchannels().n_total() == 0) || (column.bundle && column.bundle->nchannels().n_total() == 0)) { - /* One of the bundles has no channels, which means that it has none of the appropriate type, - and is only being displayed to look pretty. So we don't need to do anything. - */ - return; - } - delete _menu; _menu = new Menu; @@ -468,16 +461,23 @@ PortMatrix::popup_menu (BundleChannel column, BundleChannel row, uint32_t t) uint32_t c = count_of_our_type (bc[dim].bundle->nchannels ()); if ((_show_only_bundles && c > 0) || c == 1) { + + /* we're looking just at bundles, or our bundle has only one channel, so just offer + to disassociate all on the bundle. + */ + snprintf (buf, sizeof (buf), _("%s all"), disassociation_verb().c_str()); sub.push_back ( - MenuElem (buf, sigc::bind (sigc::mem_fun (*this, &PortMatrix::disassociate_all_on_channel), w, bc[dim].channel, dim)) + MenuElem (buf, sigc::bind (sigc::mem_fun (*this, &PortMatrix::disassociate_all_on_bundle), w, dim)) ); - - } else { + + } else if (c != 0) { if (bc[dim].channel != -1) { + /* specific channel under the menu, so just offer to disassociate that */ add_disassociate_option (sub, w, dim, bc[dim].channel); - } else if (count_of_our_type (bc[dim].bundle->nchannels()) != 0) { + } else { + /* no specific channel; offer to disassociate all, or any one in particular */ snprintf (buf, sizeof (buf), _("%s all"), disassociation_verb().c_str()); sub.push_back ( MenuElem (buf, sigc::bind (sigc::mem_fun (*this, &PortMatrix::disassociate_all_on_bundle), w, dim)) @@ -562,7 +562,7 @@ PortMatrix::disassociate_all_on_channel (boost::weak_ptr bundle, uint32_ for (PortGroup::BundleList::iterator i = a.begin(); i != a.end(); ++i) { for (uint32_t j = 0; j < (*i)->bundle->nchannels().n_total(); ++j) { - if (should_show ((*i)->bundle->channel_type(j))) { + if (!should_show ((*i)->bundle->channel_type(j))) { continue; } -- cgit v1.2.3