Fix crash in Editor::sync_order_keys() when a route is removed.
authorCarl Hetherington <carl@carlh.net>
Tue, 6 Nov 2007 12:53:04 +0000 (12:53 +0000)
committerCarl Hetherington <carl@carlh.net>
Tue, 6 Nov 2007 12:53:04 +0000 (12:53 +0000)
git-svn-id: svn://localhost/ardour2/trunk@2597 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor_route_list.cc

index e941b4c1cea4e6cf9cb15db9628b450be7df2f49..b700f9e4697b5ded979ddd67677a3168ddbfa7b1 100644 (file)
@@ -118,7 +118,7 @@ Editor::handle_new_route (Session::RouteList& routes)
                }
                
                ignore_route_list_reorder = false;
-               
+
                tv->set_old_order_key (route_display_model->children().size() - 1);
                route->gui_changed.connect (mem_fun(*this, &Editor::handle_gui_changes));
                
@@ -162,7 +162,7 @@ Editor::remove_route (TimeAxisView *tv)
        TrackViewList::iterator i = find (track_views.begin(), track_views.end(), tv);
 
        /* set up `nearby' to be a suitable nearby track to select once
-          this one has gong */
+          this one has gone */
        TrackViewList::iterator nearby = track_views.end ();
        if (i != track_views.end()) {
 
@@ -191,6 +191,14 @@ Editor::remove_route (TimeAxisView *tv)
                }
        }
 
+       /* Decrement old order keys for tracks `above' the one that is being removed */
+       for (ri = rows.begin(); ri != rows.end(); ++ri) {
+               TimeAxisView* v = (*ri)[route_display_columns.tv];
+               if (v->old_order_key() > tv->old_order_key()) {
+                       v->set_old_order_key (v->old_order_key() - 1);
+               }
+       }
+
        for (ri = rows.begin(); ri != rows.end(); ++ri) {
                if ((*ri)[route_display_columns.tv] == tv) {
                        route_display_model->erase (ri);