diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 2f555041be..2085ff11d7 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -5600,6 +5600,22 @@ Editor::queue_redisplay_track_views () } } +void +Editor::process_redisplay_track_views () +{ + if (_tvl_redisplay_connection.connected ()) { + _tvl_redisplay_connection.disconnect (); + redisplay_track_views (); + } +} + +void +Editor::redisplay_track_views_now () +{ + _tvl_redisplay_connection.disconnect (); + redisplay_track_views (); +} + void Editor::resume_route_redisplay () { @@ -5882,6 +5898,8 @@ Editor::redisplay_track_views () return false; } + _tvl_redisplay_on_resume = false; + TrackViewStripableSorter cmp; track_views.sort (cmp); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 874a85b927..371f05cc61 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1236,8 +1236,11 @@ private: TrackViewList get_tracks_for_range_action () const; Gtk::VBox list_vpacker; + void queue_redisplay_track_views (); - bool redisplay_track_views (); + void process_redisplay_track_views (); + void redisplay_track_views_now (); + bool redisplay_track_views (); // do not call this directly, use above wrappers bool _tvl_no_redisplay; bool _tvl_redisplay_on_resume; diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index 1a59859ddd..83ec521fce 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -957,6 +957,9 @@ Editor::ensure_time_axis_view_is_visible (TimeAxisView const & track, bool at_to return; } + /* apply any pending [height] changes */ + process_redisplay_track_views (); + /* compute visible area of trackview group, as offsets from top of * trackview group. */ diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index b4223327ca..129f1171e4 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -8506,6 +8506,9 @@ Editor::fit_tracks (TrackViewList & tracks) } } + /* apply height changes, so that scrolling works */ + process_redisplay_track_views (); + /* set the controls_layout height now, because waiting for its size request signal handler will cause the vertical adjustment setting to fail