summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-09-28 14:49:49 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-09-28 17:42:11 -0400
commit0613ddd1f9b3ccd7de086738aab874c4153a20cc (patch)
tree511acfbf259eff60fc1fa7d2883a59da712cacad
parent9f8fe4b0bcedc05538d5351b5b7feeb62b2e2f4c (diff)
better more reliable checks on renamed, newly created and imported track/bus names
-rw-r--r--libs/ardour/ardour/ardour.h1
-rw-r--r--libs/ardour/globals.cc21
-rw-r--r--libs/ardour/route.cc2
-rw-r--r--libs/ardour/session.cc27
4 files changed, 31 insertions, 20 deletions
diff --git a/libs/ardour/ardour/ardour.h b/libs/ardour/ardour/ardour.h
index 8be99a4aba..25e2518c83 100644
--- a/libs/ardour/ardour/ardour.h
+++ b/libs/ardour/ardour/ardour.h
@@ -52,6 +52,7 @@ namespace ARDOUR {
extern LIBARDOUR_API PBD::Signal1<void,int> PluginScanTimeout;
extern LIBARDOUR_API PBD::Signal0<void> GUIIdle;
extern LIBARDOUR_API PBD::Signal3<bool,std::string,std::string,int> CopyConfigurationFiles;
+ extern LIBARDOUR_API std::vector<std::string> reserved_io_names;
/**
* @param with_vst true to enable VST Support
diff --git a/libs/ardour/globals.cc b/libs/ardour/globals.cc
index a76fae4fee..9f512c1ec0 100644
--- a/libs/ardour/globals.cc
+++ b/libs/ardour/globals.cc
@@ -142,6 +142,8 @@ PBD::Signal1<void,int> ARDOUR::PluginScanTimeout;
PBD::Signal0<void> ARDOUR::GUIIdle;
PBD::Signal3<bool,std::string,std::string,int> ARDOUR::CopyConfigurationFiles;
+std::vector<std::string> ARDOUR::reserved_io_names;
+
static bool have_old_configuration_files = false;
namespace ARDOUR {
@@ -506,6 +508,25 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization, const char* localedir
ARDOUR::AudioEngine::create ();
+ /* it is unfortunate that we need to include reserved names here that
+ refer to control surfaces. But there's no way to ensure a complete
+ lack of collisions without doing this, since the control surface
+ support may not even be active. Without adding an API to control
+ surface support that would list their port names, we do have to
+ list them here.
+ */
+
+ char const * reserved[] = {
+ _("Monitor"),
+ _("Master"),
+ _("Control"),
+ _("Click"),
+ _("Mackie"),
+ 0
+ };
+
+ reserved_io_names = I18N (reserved);
+
libardour_initialized = true;
return true;
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 29aa5b8a6a..6b7929bf82 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -365,7 +365,7 @@ Route::ensure_track_or_route_name(string name, Session &session)
string newname = name;
while (!session.io_name_is_legal (newname)) {
- newname = bump_name_once (newname, '.');
+ newname = bump_name_once (newname, ' ');
}
return newname;
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index dfcb8cfd92..496afad83b 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -2196,30 +2196,13 @@ Session::resort_routes_using (boost::shared_ptr<RouteList> r)
bool
Session::find_route_name (string const & base, uint32_t& id, string& name, bool definitely_add_number)
{
- /* it is unfortunate that we need to include reserved names here that
- refer to control surfaces. But there's no way to ensure a complete
- lack of collisions without doing this, since the control surface
- support may not even be active. Without adding an API to control
- surface support that would list their port names, we do have to
- list them here.
- */
-
- char const * const reserved[] = {
- _("Monitor"),
- _("Master"),
- _("Control"),
- _("Click"),
- _("Mackie"),
- 0
- };
-
/* the base may conflict with ports that do not belong to existing
routes, but hidden objects like the click track. So check port names
before anything else.
*/
- for (int n = 0; reserved[n]; ++n) {
- if (base == reserved[n]) {
+ for (vector<string>::const_iterator reserved = reserved_io_names.begin(); reserved != reserved_io_names.end(); ++reserved) {
+ if (base == *reserved) {
definitely_add_number = true;
if (id < 1) {
id = 1;
@@ -3875,6 +3858,12 @@ Session::io_name_is_legal (const std::string& name)
{
boost::shared_ptr<RouteList> r = routes.reader ();
+ for (vector<string>::const_iterator reserved = reserved_io_names.begin(); reserved != reserved_io_names.end(); ++reserved) {
+ if (name == *reserved) {
+ return false;
+ }
+ }
+
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
if ((*i)->name() == name) {
return false;