* callbacks are unregistered during session-deletion, skip saving them
during session destruction.
* prevent duplicate state restore, re-load script with the session, not
window instance.
Honor the sesssion's sample-rate when showing the dialog with the engine
stopped. This can happen when then engine dies or hide/show the dialog
after manually stopping the engine.
Previously EditorAction and ExitorHook scripts were saved with
instant.xml. The were saved with each session and in the config
dir (for new sessions). This allowed inconsistent UI setups, especially
when loading old sessions that had no or different scripts.
Now Editor scripts (actions and hooks) are saved in a dedicated file,
session-independently. This goes along with ui_config in general
e.g. action-table-columns
The scripts are not saved with ui_config file for two reasons:
ui_config settings related to built-in ui_config_vars.h,
and in the future there may be further indirection like "ui-rc-file".
Note: previously loaded editor scripts are lost with this change.
When tooltips are disabled, but a tooltip column is set for a treeview,
the treeview selection behaves inconsistently. It requires a 3rd click
after expanding any child-rows to select a child.
The column labels are drawn in an angle towards the edge where the row labels
are. Therefore, if the column labels are much longer than the row labels it can
happen that they go beyond the left edge. In that case we have to add an extra
width to the row labels.
This fixes an issue with Mixbus. If the default "Create Audio Tracks.."
template/script is not available. Nothing is selected.
Selecting a type/template is required to update various other dialog
fields. eg. "Name" field.
Previously: Create VCA. OK+Close. Re-open dialog. Now the
implicit default was "Audio Track" but the Name-field still showed "VCA".
- _session cannot be NULL while the dialog is visible.
This removes extra `if (_session)` tests.
- Operations now no longer fail silently, but show error messages.
PluginPinWidgets initially receive their Session pointer by
PluginPinDialog::set_session(). When a RouteProcessorChange occurs all
PluginPinWidgets are recreated. Those newly created instances need a pointer to
the session.
RowReference was responsible for 75% of the cost of building the region list, and incurs cost
at every later insert/delete/reorder. Since both ListStore and TreeStore have persistent iterators,
use them instead