If the extension is not found, string::rfind() returns -1,
That can still match unrelated file if the file-name is one
char longer than an arbitrary extension.
eg. "foo" matched ".aiff" because
-1 = strlen("foo") - strlen(".aiff")
Also due to a missing comma ".VOC.vwe" matched any file shorter
than 7 chars in length.
If minibpm's estimate of tempo implies that the clip has a duration measured in
fractional bars, use the estimate as a starting point to get to a tempo that
will lead to an integer number of bars (and quarters)
Strip::notify_property_changed accesses _stripable without verifying
that is not null. However it is possible for this to be null, so
add a null check.
Only enable the master display and meter modes for Qcon devices if this
surface is in the master position. Extenders don't have master meters
or master displays.
Logic to detect an extender has to be based on if this surface object is
the master position. Has master fader is true for all surfaces in this
"device".
Bad design idea. Signal would be emitted from the triggerbox thread, and cannot
return a value from the GUI. Would also be problematic for clip loading
initiated from a control surface
* Resolve ambiguity between typef'ed ARDOUR::timepos_t and
Temporal::timepos_t (and timecnt_t, superclock_t)
* Add missing classes TempoPoint, MeterPoint, which are
return value for various TempoMap methods.
* Change TempoMap into a shared_ptr<> class.
* Move Tempo and Meter out of ARDOUR into Temporal namespace.
* add various bindings to access the TempoMap
* move Temporal enums out of ARDOUR::Temporal namespace
This is mainly for the benefit of Lua bindings, but also increases
overall API naming consistency with functions and methods
`is_XYZ()` being used elsewhere.
This API change breaks builds!
If there's a grabbed item (GtkCanvas only at present) then unless it belongs to the scroll
group used for scroll offset translation, the event coordinates should not be translated,
even if the mouse pointer moves into the scroll group.