summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
}
}