safe EditorRoutes::redisplay()
authorRobin Gareus <robin@gareus.org>
Sat, 6 Sep 2014 20:00:42 +0000 (22:00 +0200)
committerRobin Gareus <robin@gareus.org>
Sat, 6 Sep 2014 20:01:39 +0000 (22:01 +0200)
gtk2_ardour/editor_routes.cc
gtk2_ardour/editor_routes.h

index 7ad4e8a7cd214e2746fd20e44a63bdcc6daa7efc..a33a27c689d31d73fbdaa3df00186bb292344351 100644 (file)
@@ -70,6 +70,8 @@ EditorRoutes::EditorRoutes (Editor* e)
        : EditorComponent (e)
         , _ignore_reorder (false)
         , _no_redisplay (false)
+        , _redisplaying (false)
+        , _redisplay_2 (false)
         , _adding_routes (false)
         , _route_deletion_in_progress (false)
         , _menu (0)
@@ -495,9 +497,14 @@ EditorRoutes::show_menu ()
 void
 EditorRoutes::redisplay ()
 {
-       if (_no_redisplay || !_session || _session->deletion_in_progress() || _redisplaying) {
+       if (_redisplaying) {
+               _redisplay_2 = true;
                return;
        }
+       if (_no_redisplay || !_session || _session->deletion_in_progress()) {
+               return;
+       }
+       _redisplay_2 = false;
        _redisplaying = true; // tv->show_at() below causes recursive redisplay via handle_gui_changes()
 
        TreeModel::Children rows = _model->children();
@@ -548,6 +555,9 @@ EditorRoutes::redisplay ()
                _editor->vertical_adjustment.set_value (_editor->_full_canvas_height - _editor->_visible_canvas_height);
        }
        _redisplaying = false;
+       if (_redisplay_2) {
+               redisplay();
+       }
 }
 
 void
index 0e30974887ffcd62af9e6d2e0d077c9d73d2f936..0d299f0d0f619a21b30ecb2982d1f1ffd2e38085 100644 (file)
@@ -153,6 +153,7 @@ private:
        bool _ignore_reorder;
        bool _no_redisplay;
        bool _redisplaying;
+       bool _redisplay_2;
        bool _adding_routes;
        bool _route_deletion_in_progress;
        int  _queue_mute_rec_solo_etc;