This allows ctrl surfaces (notably Faderport) to keep
editing plugin settings, when some unrelated plugin is removed.
Route::processors_changed calls RouteTimeAxisView::processors_changed,
and if a plugin automation line vanishes ~AutomationTimeAxisView
deselected the track. This triggered a control surface update.
* add spaces around "->"
* consistently use "time domain" (instead of "timebase")
* remove "Edit ->" from "Preferences" (on macOS Prefs
are not in the edit menu
Now that Location signal(s) are only emitted when the
drag ended, the list can be kept in sync.
This also adds a further optimization to only update the
list once, even when multiple locations have been changed.
Section Markers only need to be updated when an actual
section-marker is modified OR flags change.
This also removes duplicate signal subscriptions and
caches sorted Location list when iterating over section markers.
This allows Ardour to re-open previously shown plugins,
and toggle externalUI.
This worked in the distant past, before Ardour 3.3 introduced
the Ardour Window Manager.
when the surround bus is removed, it (probably erroneously) causes
changes to the I/O routing for the auditioner, which will be
delivered to anyone who cares via an RCConfiguration ParameterChanged
signal. This will be emitted from a non-GUI thread, and so will not
be handled synchronously. The GUI thread will first handle the notification
that the surround bus was deleted, and that will include deleting the
MixerStrip for the surround bus. But another call_slot() request will
be pending to notify the now-deleted MixerStrip about the auditioner change.
Adding invalidator() calls ensures that the deletion of the MixerStrip removes
all of these pending call_slot() requests.
The box outlines a given region, the grab position may be earlier
than the region's position.
Previously this caused a crash (uncaught exception):
```gdb
__cxa_throw () at /lib/x86_64-linux-gnu/libstdc++.so.6
Temporal::timecnt_t::timecnt_t(Temporal::timecnt_t const&, Temporal::timepos_t const&) at ../libs/temporal/timeline.cc:79
RegionMoveDrag::setup_pointer_offset() at ../gtk2_ardour/editor_drag.cc:2226
```
deleting regionviews changed the region selection, but the regionview
ptr had not been removed from the RegionViewList. The selection change signal
caused an iteration over the list, and manipulated the deleted regionview.
The former was incorrectly implemented, and the latter has already been tested more
in real life.
We should likely remove ::remove_time also and use shift() there too, but that
requires testing negative shifts more broadly.
Editor::duplicate copies regions one at a time. This lead
to region layeres not being retained, particularly since
Playlist::duplicate() puts the duplicated layer at the top.
This fixes an issue where brining up a menu can directly activate an
action in the menu. Notably on macOS.
Nathan reports that this may also address #9515
Note: mac touchpads are not affected since right-click there is
effectively a "press and hold".
freetype on macOS does not scale fonts, font-scale and ui_scale
have to remain at 100% otherwise other UI elements change size
while the font does not.
The InstrumentSelector keeps a PluginPtr reference to all
instruments. By default Ardour does not destroy the editor
at exit, So 3 instances of Instrument Selector can remain
* TriggerClipPicker in the editor sidebar (owned by _editor)
* TriggerClipPicker on the TriggerPage (owned by trigger_page)
* SoundFileOmega (sfbrowser owned by Editor)
If a shared_ptr reference is retained, VST3 Module is not
unloaded at exit. This leads to issues with various plugins.
eg. Reason Rack does not terminate, Ardour hangs at exit.