diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-10-24 12:18:40 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-10-24 12:18:46 -0400 |
commit | f90071113654c5d788e90196db5ee1dedd11172f (patch) | |
tree | 54e708b10f4df0687db03bda9feb3d16dc83ff38 /gtk2_ardour/location_ui.cc | |
parent | 2f4a8cf69394d4c6442381297136662af923f577 (diff) |
port changes to ARDOUR::Location and ARDOUR::Locations APIs from Tracks to Ardour.
Fixes deadlocks caused by mutex on Locations list, and clarifies the purposes and uses of the class-level and
object-level change-related signals.
Diffstat (limited to 'gtk2_ardour/location_ui.cc')
-rw-r--r-- | gtk2_ardour/location_ui.cc | 20 |
1 files changed, 4 insertions, 16 deletions
diff --git a/gtk2_ardour/location_ui.cc b/gtk2_ardour/location_ui.cc index 538d7315bd..689706ba01 100644 --- a/gtk2_ardour/location_ui.cc +++ b/gtk2_ardour/location_ui.cc @@ -959,7 +959,7 @@ LocationUI::location_removed (Location* location) } void -LocationUI::map_locations (Locations::LocationList& locations) +LocationUI::map_locations (const Locations::LocationList& locations) { Locations::LocationList::iterator i; gint n; @@ -968,9 +968,8 @@ LocationUI::map_locations (Locations::LocationList& locations) LocationSortByStart cmp; temp.sort (cmp); - locations = temp; - for (n = 0, i = locations.begin(); i != locations.end(); ++n, ++i) { + for (n = 0, i = temp.begin(); i != temp.end(); ++n, ++i) { Location* location = *i; @@ -1074,10 +1073,10 @@ LocationUI::set_session(ARDOUR::Session* s) SessionHandlePtr::set_session (s); if (_session) { - _session->locations()->changed.connect (_session_connections, invalidator (*this), boost::bind (&LocationUI::locations_changed, this, _1), gui_context()); - _session->locations()->StateChanged.connect (_session_connections, invalidator (*this), boost::bind (&LocationUI::refresh_location_list, this), gui_context()); _session->locations()->added.connect (_session_connections, invalidator (*this), boost::bind (&LocationUI::location_added, this, _1), gui_context()); _session->locations()->removed.connect (_session_connections, invalidator (*this), boost::bind (&LocationUI::location_removed, this, _1), gui_context()); + _session->locations()->changed.connect (_session_connections, invalidator (*this), boost::bind (&LocationUI::refresh_location_list, this), gui_context()); + _clock_group->set_clock_mode (clock_mode_from_session_instant_xml ()); } @@ -1088,17 +1087,6 @@ LocationUI::set_session(ARDOUR::Session* s) } void -LocationUI::locations_changed (Locations::Change c) -{ - /* removal is signalled by both a removed and a changed signal emission from Locations, - so we don't need to refresh the list on a removal - */ - if (c != Locations::REMOVAL) { - refresh_location_list (); - } -} - -void LocationUI::session_going_away() { ENSURE_GUI_THREAD (*this, &LocationUI::session_going_away); |