summaryrefslogtreecommitdiff
path: root/gtk2_ardour/mixer_ui.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/mixer_ui.cc')
-rw-r--r--gtk2_ardour/mixer_ui.cc23
1 files changed, 17 insertions, 6 deletions
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index a141999277..468cdf2244 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -51,6 +51,7 @@
#include "ardour_ui.h"
#include "prompter.h"
#include "utils.h"
+#include "route_sorter.h"
#include "actions.h"
#include "gui_thread.h"
#include "mixer_group_tabs.h"
@@ -543,20 +544,30 @@ Mixer_UI::sync_treeview_from_order_keys (RouteSortOrderKey src)
return;
}
- neworder.assign (rows.size(), 0);
-
+ OrderKeySortedRoutes sorted_routes;
+
for (TreeModel::Children::iterator ri = rows.begin(); ri != rows.end(); ++ri, ++old_order) {
boost::shared_ptr<Route> route = (*ri)[track_columns.route];
- uint32_t new_order = route->order_key (MixerSort);
+ sorted_routes.push_back (RoutePlusOrderKey (route, old_order, route->order_key (MixerSort)));
+ }
+
+ SortByNewDisplayOrder cmp;
+
+ sort (sorted_routes.begin(), sorted_routes.end(), cmp);
+ neworder.assign (sorted_routes.size(), 0);
+
+ uint32_t n = 0;
+
+ for (OrderKeySortedRoutes::iterator sr = sorted_routes.begin(); sr != sorted_routes.end(); ++sr, ++n) {
- neworder[new_order] = old_order;
+ neworder[n] = sr->old_display_order;
- if (old_order != new_order) {
+ if (sr->old_display_order != n) {
changed = true;
}
DEBUG_TRACE (DEBUG::OrderKeys, string_compose ("MIXER change order for %1 from %2 to %3\n",
- route->name(), old_order, new_order));
+ sr->route->name(), sr->old_display_order, n));
}
if (changed) {