From d5b13692582e014c02dff75bf85ae6765d762dc4 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 3 Oct 2008 13:38:21 +0000 Subject: [PATCH] probable fix for track sync-ordering, part II to come in a minute git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3850 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/editor.h | 2 +- gtk2_ardour/editor_route_list.cc | 29 ++++++++++++++++------------- gtk2_ardour/mixer_ui.cc | 12 +++++------- gtk2_ardour/mixer_ui.h | 3 +-- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index f5b72508be..4afce621cf 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1710,7 +1710,7 @@ public: void update_route_visibility (); - void sync_order_keys (); + void sync_order_keys (void*); bool ignore_route_order_sync; bool route_list_display_button_press (GdkEventButton*); diff --git a/gtk2_ardour/editor_route_list.cc b/gtk2_ardour/editor_route_list.cc index 63cef256a0..78a7754e5a 100644 --- a/gtk2_ardour/editor_route_list.cc +++ b/gtk2_ardour/editor_route_list.cc @@ -51,7 +51,6 @@ Editor::handle_new_route (Session::RouteList& routes) TreeModel::Row row; ignore_route_list_reorder = true; - ignore_route_order_sync = true; no_route_list_redisplay = true; for (Session::RouteList::iterator x = routes.begin(); x != routes.end(); ++x) { @@ -86,7 +85,6 @@ Editor::handle_new_route (Session::RouteList& routes) } ignore_route_list_reorder = false; - ignore_route_order_sync = false; no_route_list_redisplay = false; redisplay_route_list (); @@ -226,13 +224,13 @@ Editor::show_track_in_display (TimeAxisView& tv) } void -Editor::sync_order_keys () +Editor::sync_order_keys (void *src) { vector neworder; TreeModel::Children rows = route_display_model->children(); TreeModel::Children::iterator ri; - if (ignore_route_order_sync || !session || (session->state_of_the_state() & Session::Loading) || rows.empty()) { + if (src == this || !session || (session->state_of_the_state() & Session::Loading) || rows.empty()) { return; } @@ -240,15 +238,24 @@ Editor::sync_order_keys () neworder.push_back (0); } + bool changed = false; + for (ri = rows.begin(); ri != rows.end(); ++ri) { TimeAxisView* tv = (*ri)[route_display_columns.tv]; boost::shared_ptr route = (*ri)[route_display_columns.route]; - neworder[route->order_key (X_("editor"))] = tv->old_order_key (); + int old_key = tv->old_order_key(); + int new_key = route->order_key (X_("editor")); + + neworder[new_key] = old_key; + + if (new_key != old_key) { + changed = true; + } } - ignore_route_list_reorder = true; - route_display_model->reorder (neworder); - ignore_route_list_reorder = false; + if (changed) { + route_display_model->reorder (neworder); + } } void @@ -314,9 +321,7 @@ Editor::redisplay_route_list () } if (Config->get_sync_all_route_ordering() && !ignore_route_list_reorder) { - ignore_route_order_sync = true; - Route::SyncOrderKeys (); // EMIT SIGNAL - ignore_route_order_sync = false; + Route::SyncOrderKeys (this); // EMIT SIGNAL } } @@ -571,9 +576,7 @@ void Editor::route_list_delete (const Gtk::TreeModel::Path& path) { session->set_remote_control_ids(); - ignore_route_list_reorder = true; redisplay_route_list (); - ignore_route_list_reorder = false; } void diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 107ebe532a..b6b230e13b 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -71,7 +71,6 @@ Mixer_UI::Mixer_UI () in_group_row_change = false; _visible = false; ignore_route_reorder = false; - ignore_sync = false; Route::SyncOrderKeys.connect (mem_fun (*this, &Mixer_UI::sync_order_keys)); @@ -355,13 +354,13 @@ Mixer_UI::get_order_key() void -Mixer_UI::sync_order_keys () +Mixer_UI::sync_order_keys (void *src) { vector neworder; TreeModel::Children rows = track_model->children(); TreeModel::Children::iterator ri; - if (ignore_sync || !session || (session->state_of_the_state() & Session::Loading) || rows.empty()) { + if (src == this || !session || (session->state_of_the_state() & Session::Loading) || rows.empty()) { return; } @@ -712,15 +711,14 @@ Mixer_UI::redisplay_track_list () } if (Config->get_sync_all_route_ordering() && !ignore_route_reorder) { - ignore_sync = true; - Route::SyncOrderKeys (); // EMIT SIGNAL - ignore_sync = false; + Route::SyncOrderKeys (this); // EMIT SIGNAL } // Rebind all of the midi controls automatically - if (auto_rebinding) + if (auto_rebinding) { auto_rebind_midi_controls (); + } } diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h index 06a16519cc..d8c80f664a 100644 --- a/gtk2_ardour/mixer_ui.h +++ b/gtk2_ardour/mixer_ui.h @@ -242,9 +242,8 @@ class Mixer_UI : public Gtk::Window Width _strip_width; - void sync_order_keys (); + void sync_order_keys (void *src); bool ignore_route_reorder; - bool ignore_sync; static const int32_t default_width = 478; static const int32_t default_height = 765;