When exporting long sessions with freewheeling, pulseaudio
may meanwhile suspend the corked audio device. The "FAIL_ON_SUSPEND"
option then prevents ardour to uncork it after export, and the
audio-backend is halted.
*PluginInfo::load() eventually calls `plugin->set_info()`
which depends on a valid PluginPtr. The method needs to return
early if `plugin` is unset or null.
Some fixed size AU, do unset `autoresizesSubviews` (Apple's default
is enabled). This also results in the initial size, and position
below Ardour's toolbar to be set incorrectly.
This fixes e.g. Reason Rack Plug AU (and maybe others).
This affects only windows opened from the mixer window,
in case the mixer is detached and on a different workspace (desktop).
Window::init (and Dialog::init) set transient parent early on,
and it defaults to the main window (with toolbar). It needs to be
unset before presenting the window, in order to show the window
on the same workspace as the eventual transient parent.
This follows 6dc9134 and f3fbf58.
This follows f3fbf58185 which unconditionally set the main window
as transient parent. However when detaching the mixer, plugins should
be transient for the detached parent window.
Route::realtime_handle_transport_stopped() does have insufficient
information (PostTransportLocate), so "flush" is called from
Route::non_realtime_transport_stop in the butler thread.
However plugin de/activate() must not be called concurrently with
processing. e.g. https://lv2plug.in/ns/lv2core explicitly states:
"Hosts MUST guarantee that: An Instantiation function for an instance
is never called concurrently with any other function for that instance."