summaryrefslogtreecommitdiff
path: root/gtk2_ardour/mixer_ui.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-12-04 14:32:28 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-12-04 14:32:28 +0000
commit89d1a2fdf5f9794f56f6bf960bfbebfad913cf74 (patch)
tree5a2d55a420955f86151ba37870f1de0762195456 /gtk2_ardour/mixer_ui.cc
parent1feaa65d167e59b400b8ac003f69e33934ee7c08 (diff)
dramatically speed up the addition of large numbers of busses + tracks. consists of a backend part (ignore JACK graph/latency callbacks while we're adding tracks) and a GUI side (avoid O(N^N) behaviour while adding each new time axis view)
git-svn-id: svn://localhost/ardour2/branches/3.0@13595 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/mixer_ui.cc')
-rw-r--r--gtk2_ardour/mixer_ui.cc14
1 files changed, 10 insertions, 4 deletions
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index 18ad28d774..560c37bb1d 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -311,9 +311,10 @@ Mixer_UI::add_strips (RouteList& routes)
{
MixerStrip* strip;
- {
- Unwinder<bool> uw (no_track_list_redisplay, true);
-
+ try {
+ no_track_list_redisplay = true;
+ track_display.set_model (Glib::RefPtr<ListStore>());
+
for (RouteList::iterator x = routes.begin(); x != routes.end(); ++x) {
boost::shared_ptr<Route> route = (*x);
@@ -345,7 +346,7 @@ Mixer_UI::add_strips (RouteList& routes)
strip = new MixerStrip (*this, _session, route);
strips.push_back (strip);
-
+
Config->get_default_narrow_ms() ? _strip_width = Narrow : _strip_width = Wide;
if (strip->width_owner() != strip) {
@@ -365,8 +366,13 @@ Mixer_UI::add_strips (RouteList& routes)
strip->WidthChanged.connect (sigc::mem_fun(*this, &Mixer_UI::strip_width_changed));
strip->signal_button_release_event().connect (sigc::bind (sigc::mem_fun(*this, &Mixer_UI::strip_button_release_event), strip));
}
+
+ } catch (...) {
}
+ no_track_list_redisplay = false;
+ track_display.set_model (track_model);
+
sync_order_keys_from_treeview ();
redisplay_track_list ();
}