From 1b2bc203ac42ef19560b4d103cb5e2cc03b4f1cc Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Sun, 23 Apr 2017 21:32:09 +1000 Subject: Add regions at once rather than individually when restoring Selection state This is a workaround for performance issues with the current implementation when adding many regions to the selection one at a time. If the Selection implementation was to change at some point and adding regions to the selection only takes a small constant amount of time, then this optimization may no longer be necessary. Related to: #7274 --- gtk2_ardour/selection.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'gtk2_ardour/selection.cc') diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc index b7230ad7e1..1114222248 100644 --- a/gtk2_ardour/selection.cc +++ b/gtk2_ardour/selection.cc @@ -1387,6 +1387,8 @@ Selection::set_state (XMLNode const & node, int) clear_tracks (); clear_markers (); + RegionSelection selected_regions; + PBD::ID id; XMLNodeList children = node.children (); for (XMLNodeList::const_iterator i = children.begin(); i != children.end(); ++i) { @@ -1411,7 +1413,7 @@ Selection::set_state (XMLNode const & node, int) editor->get_regionviews_by_id (id, rs); if (!rs.empty ()) { - add (rs); + selected_regions.insert (selected_regions.end(), rs.begin(), rs.end()); } else { /* regionviews haven't been constructed - stash the region IDs @@ -1571,6 +1573,9 @@ Selection::set_state (XMLNode const & node, int) } + // now add regions to selection at once + add (selected_regions); + return 0; } -- cgit v1.2.3