... Problem involves sequence in which event handlers are done, and started at
commit 278509a which updated track Y coordinates in a handler.
Solution is to delay the updating of scrollbars further, using CallAfter.
Also remove one unnecessary call to ProjectWindow::FixScrollbars() because
ProjectWindow::HandleResize follows it and includes scrollbar update already.
... TrackPanelAx now sends an event to the project when track focus changes,
and TrackPanel listens for it.
TrackPanel also initializes TrackPanelAx with a callback to do the details of
rectangle calculation.
... The declarations in namespaces in Menus.h are gone, the function
definitions moved elsewhere.
So there had been hidden dependencies on the src/menus files, that
scripts/graph.pl did not detect. Now the lack of dependencies on those
files, according to the graph, is almost the reality.
EXCEPT that src/Menus.cpp still has extern declarations of functions defined
in src/menus/* that populate the menus, so things really are still tied up
in cycles.
Breaking that link dependency is one purpose of the future project of defining
a menu item registration system.
The graph as reported by scripts/graph.pl has only some minor changes. The
big s.c.c. grows again to 26, two new files in it, one file
(CommonCommandFlags) trapped in it again.
... not the best thing for the long term, but hidden dependencies on
TransportMenus.cpp are eliminated
Tying CommonCommandFlags again into the big component, which is now 26
... They are:
Effect
EffectManager, EffectRack (in a cycle of 2)
Nyquist
There is also one new file, RealtimeEffectManager. Making AudioIO use that,
instead of the whole of EffectManager, was essential to this improvement of
the graph.
... and simplify, using a std::atomic instead of a critical section.
(But did this before, and does this now, correctly synchronize across threads?
I defer that question.)
... though in a small cycle with each other, by moving RealtimeEffectManager to
new files, which remain in the big component.
Net loss of 1, the big component now has 27 files
... Breaking up an s.c.c. of 6 into 3 components:
ODManager, ODTask, ODWaveTrackTaskQueue
UndoManager
WaveClip, WaveTrack
Rewrite the OD tasks and queues to hold weak pointers to tracks, so the
track destructor need not notify them.