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
This commit is contained in:
Paul Davis 2008-10-03 13:38:21 +00:00
parent c1f85106cc
commit d5b1369258
4 changed files with 23 additions and 23 deletions

View file

@ -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*);

View file

@ -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<int> 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> 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

View file

@ -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<int> 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 ();
}
}

View file

@ -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;