diff options
author | Robin Gareus <robin@gareus.org> | 2015-04-30 18:01:30 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-04-30 18:01:30 +0200 |
commit | e3375c309abbfc42baaedcc9ba7367e89314ab69 (patch) | |
tree | c1ec0ba902f481bb9fc71be02d91e848b2ed338d /gtk2_ardour/editor_routes.cc | |
parent | ae38128f88270df6ad24a0aa167adfc248276509 (diff) |
suspend editor redisplay during batch changes
(major speed-up when changing all meters)
Diffstat (limited to 'gtk2_ardour/editor_routes.cc')
-rw-r--r-- | gtk2_ardour/editor_routes.cc | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc index 327841f4ad..8ab17897d7 100644 --- a/gtk2_ardour/editor_routes.cc +++ b/gtk2_ardour/editor_routes.cc @@ -77,7 +77,8 @@ EditorRoutes::EditorRoutes (Editor* e) , _menu (0) , old_focus (0) , selection_countdown (0) - , name_editable (0) + , name_editable (0) + , _redisplay_on_resume (false) { static const int column_width = 22; @@ -360,6 +361,13 @@ EditorRoutes::set_session (Session* s) if (_session) { _session->SoloChanged.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::solo_changed_so_update_mute, this), gui_context()); _session->RecordStateChanged.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::update_rec_display, this), gui_context()); + + /* TODO: check if these needs to be tied in with DisplaySuspender + * Given that the UI is single-threaded and DisplaySuspender is only used + * in loops in the UI thread all should be fine. + */ + _session->BatchUpdateStart.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::suspend_redisplay, this), gui_context()); + _session->BatchUpdateEnd.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::resume_redisplay, this), gui_context()); } } @@ -549,7 +557,12 @@ EditorRoutes::redisplay_real () void EditorRoutes::redisplay () { - if (_no_redisplay || !_session || _session->deletion_in_progress()) { + if (!_session || _session->deletion_in_progress()) { + return; + } + + if (_no_redisplay) { + _redisplay_on_resume = true; return; } |