diff options
author | Carl Hetherington <carl@carlh.net> | 2011-05-11 14:15:32 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2011-05-11 14:15:32 +0000 |
commit | 53924476863b7a159596ad585fd6829d44f2cc28 (patch) | |
tree | bf8a045f7b8b05b793eed38c9b129de45e2ac6bf /gtk2_ardour/editor_routes.cc | |
parent | 29ee63707f971684d4ee58373d8185edfe419578 (diff) |
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
Diffstat (limited to 'gtk2_ardour/editor_routes.cc')
-rw-r--r-- | gtk2_ardour/editor_routes.cc | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc index 1368979e58..8368bff66a 100644 --- a/gtk2_ardour/editor_routes.cc +++ b/gtk2_ardour/editor_routes.cc @@ -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; } } |