This issue could be seen when dragging an arrangement marker beyond the
bottom of the list in the right edge.
IIUC, std::reverse_iterator<Iter>::operator* creates a temporary iterator
which it then dereferences. This is a problem because what we are
derefencing is a Gtk::TreeIter<Gtk::TreeRow>. gtkmm documentation for
Gtk::TreeIter< T >::operator* states, "The returned reference is
implemented by casting from *this, and so the returned reference is only
valid while this iter is." Additionally, cpp documentation for
std::reverse_iterator states, "std::reverse_iterator does not work with
iterators whose dereference returns a reference to a member of *this."
We also are not advancing this iterator at all, so whether it is reverse
or not is irrelevant (we just want the last one). Thus, *prev(rows.end ())
instead of *rows.rbegin ().
If walking the grid by bar, but points are closer than that, we could end up
with the wrong TempoMetric being used to compute various time domain
conversions (which tends to leads to abort()).
This small change makes sure that we keep looking for more points if we have
not yet reached the next grid point (e.g. bar).
This fixes a design mistake made way back in 2009 (80e3845982) that for
reasons now unknown used std::shared_ptr<T> to manage sysex and patch change
canvas items. This is incompatible with the overall (current) design of the
canvas, and in particular the idea that a container can be told to delete
its children.
This supplements the reversion done in e664fa5e63 and fixes crashes
caused by double-free's in sessions with sysex and patch changes displayed
in pianorolls
Choosing some option and then trying to remove it by clicking "Disabled"
previously did nothing. Now sets it back to blank. Also fixed for Tascam
US-2400.
Empty means that it contains some tracks or user-addedd
busses or VCA (not counting master, monitor, surround busses).
This is motivated by A&H control-surface.
Also speeds up PT imports during region creation.
This is because regions are imported immediately when sources
are grouped into multichannels rather than doing it in another pass
This allows bulk creating tracks with different name templates.
Simply call the bulk method multiple times as required and finally
call add_routes() once.