From 5cebd64924942fab51ed7dcaaffa0553195dc24f Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 27 Jan 2022 19:56:10 +0100 Subject: [PATCH] Fix fit tracks The track-height change needs to be applied so that vertical_adjustment max range is set correctly. Otherwise vertical_adjustment.set_value() may fail or scroll to the wrong position. In 5b3eacd4219 `redisplay_track_views()` was moved from EditorRoutes to Editor. The call was delegated to the idle thread, potentially collecting multiple calls before performing the update. This resulted in "Fit selection" to set the y-offset before the height-change was applied. --- gtk2_ardour/editor.cc | 18 ++++++++++++++++++ gtk2_ardour/editor.h | 5 ++++- gtk2_ardour/editor_canvas.cc | 3 +++ gtk2_ardour/editor_ops.cc | 3 +++ 4 files changed, 28 insertions(+), 1 deletion(-) 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