Fix track rename oddity, don't skip over current name.
authorRobin Gareus <robin@gareus.org>
Mon, 6 Aug 2018 17:52:51 +0000 (19:52 +0200)
committerRobin Gareus <robin@gareus.org>
Mon, 6 Aug 2018 17:52:51 +0000 (19:52 +0200)
ensure_track_or_route_name() can produce the current name.

This fixes the following issue:
Create a two audio tracks. Their names are "Audio" and "Audio 1".
Try to rename "Audio 1" to "Audio", its name becomes "Audio 2".

libs/ardour/ardour/route.h
libs/ardour/route.cc

index d3a4a5d35f9d66f95d3dda8d70fd6e7287e74f63..152acf37e6c229478662c4bf70e4b2fef52363d1 100644 (file)
@@ -123,7 +123,7 @@ public:
        bool active() const { return _active; }
        void set_active (bool yn, void *);
 
-       static std::string ensure_track_or_route_name(std::string, Session &);
+       std::string ensure_track_or_route_name (std::string) const;
 
        std::string comment() { return _comment; }
        void set_comment (std::string str, void *src);
index fba39744fad23a5ceae76b6df8865ba30d7a8810..8b60d68632eade3ef4eccb66678ce1b1960096db 100644 (file)
@@ -272,14 +272,14 @@ Route::~Route ()
 }
 
 string
-Route::ensure_track_or_route_name(string name, Session &session)
+Route::ensure_track_or_route_name (string newname) const
 {
-       string newname = name;
-
-       while (!session.io_name_is_legal (newname)) {
+       while (!_session.io_name_is_legal (newname)) {
                newname = bump_name_once (newname, ' ');
+               if (newname == name()) {
+                       break;
+               }
        }
-
        return newname;
 }
 
@@ -4212,10 +4212,15 @@ Route::set_name (const string& str)
                return true;
        }
 
-       string name = Route::ensure_track_or_route_name (str, _session);
-       SessionObject::set_name (name);
+       string newname = Route::ensure_track_or_route_name (str);
+
+       if (newname == name()) {
+               return true;
+       }
+
+       SessionObject::set_name (newname);
 
-       bool ret = (_input->set_name(name) && _output->set_name(name));
+       bool ret = (_input->set_name(newname) && _output->set_name(newname));
 
        if (ret) {
                /* rename the main outs. Leave other IO processors
@@ -4225,7 +4230,7 @@ Route::set_name (const string& str)
                 */
 
                if (_main_outs) {
-                       if (_main_outs->set_name (name)) {
+                       if (_main_outs->set_name (newname)) {
                                /* XXX returning false here is stupid because
                                   we already changed the route name.
                                */