summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_routes.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2011-05-11 14:15:32 +0000
committerCarl Hetherington <carl@carlh.net>2011-05-11 14:15:32 +0000
commit53924476863b7a159596ad585fd6829d44f2cc28 (patch)
treebf8a045f7b8b05b793eed38c9b129de45e2ac6bf /gtk2_ardour/editor_routes.cc
parent29ee63707f971684d4ee58373d8185edfe419578 (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.cc21
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;
}
}