Cope with tracks having order keys higher than the number of tracks; although I'm not quite sure how this happens. Fixes #4037.

git-svn-id: svn://localhost/ardour2/branches/3.0@9492 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2011-05-11 14:15:32 +00:00
parent 29ee63707f
commit 5392447686

View File

@ -701,7 +701,7 @@ EditorRoutes::reordered (TreeModel::Path const &, TreeModel::iterator const &, i
void
EditorRoutes::sync_order_keys (string const & src)
{
vector<int> neworder;
map<int, int> new_order;
TreeModel::Children rows = _model->children();
TreeModel::Children::iterator ri;
@ -709,20 +709,16 @@ EditorRoutes::sync_order_keys (string const & src)
return;
}
for (ri = rows.begin(); ri != rows.end(); ++ri) {
neworder.push_back (0);
}
bool changed = false;
int order;
for (order = 0, ri = rows.begin(); ri != rows.end(); ++ri, ++order) {
boost::shared_ptr<Route> route = (*ri)[_columns.route];
int old_key = order;
int new_key = route->order_key (N_ ("editor"));
int const old_key = order;
int const new_key = route->order_key (N_ ("editor"));
neworder[new_key] = old_key;
new_order[new_key] = old_key;
if (new_key != old_key) {
changed = true;
@ -731,7 +727,14 @@ EditorRoutes::sync_order_keys (string const & src)
if (changed) {
_redisplay_does_not_reset_order_keys = true;
_model->reorder (neworder);
/* `compact' new_order into a vector */
vector<int> co;
for (map<int, int>::const_iterator i = new_order.begin(); i != new_order.end(); ++i) {
co.push_back (i->second);
}
_model->reorder (co);
_redisplay_does_not_reset_order_keys = false;
}
}