From 53d98b4db9606bd4f69adf620969a867986957aa Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 3 Aug 2013 02:46:08 +0200 Subject: [PATCH] fix "other" port-group tab Separate port-bundles for each jack client in the connection manager. Previously, apps were only listed as separate bundles if the ports were gathered at different times. ie one app shows up after the other (and if no complete re-scan was triggered) Fixes issue reported by Fons Adriaensen. --- gtk2_ardour/port_group.cc | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/gtk2_ardour/port_group.cc b/gtk2_ardour/port_group.cc index 925bebc307..531a5cf2c4 100644 --- a/gtk2_ardour/port_group.cc +++ b/gtk2_ardour/port_group.cc @@ -574,8 +574,22 @@ PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inp } for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) { - if (!extra_other[*i].empty()) { - boost::shared_ptr b = make_bundle_from_ports (extra_other[*i], *i, inputs); + if (extra_other[*i].empty()) continue; + std::string cp; + std::vector nb; + for (uint32_t j = 0; j < extra_other[*i].size(); ++j) { + std::string nn = extra_other[*i][j]; + std::string pf = nn.substr (0, nn.find_first_of (":") + 1); + if (pf != cp && !nb.empty()) { + boost::shared_ptr b = make_bundle_from_ports (nb, *i, inputs); + other->add_bundle (b); + nb.clear(); + } + cp = pf; + nb.push_back(extra_other[*i][j]); + } + if (!nb.empty()) { + boost::shared_ptr b = make_bundle_from_ports (nb, *i, inputs); other->add_bundle (b); } }