On windows AudioRegionEditor d'tor never returns, stalling or
crashing in pthread_join() after pthread_cancel().
Crashes happen if two thread pools with the same name exist.
(but since the thread has no event loop, no pool is needed)
After showing Region Properties any operation that would close the dialog
will either cause the application to hang indefinitely or terminate.
This also consolidates code: CrossThreadChannel works on windows these days
http://tracker.ardour.org/view.php?id=6833
When searching for our keyboard bindings file, ArdourKeyboard::find_bindings_files() was trying to find files with the wrong extension:- "..keys" rather than ".keys" (note the extra period). Fortunately, some later code was masking the problem (so we were eventually finding the file correctly). However we might as well fix the problem here, just in case we ever need to call ArdourKeyboard::find_bindings_files() from somewhere else in the future.
The platform has no support for libdispatch which is handy when setting up an objective C block,
and also has no Retina, which means it doesn't suffer the problem this code is intended to fix
This prevents an extra call to "redisplay" from TAV::hide() which
triggers handle_gui_changes.
Visible TAVs are positioned using show_at() which unsets _hidden.
For every added Trackview/Mixerstrip, Ardour looks up GUI properties which
results in a total of 13 calls for the initial default items per track:
("height", "visible", "layer-display", "strip-width")
Since the tracks don't yet exist, the properties don't either.
Every lookup result in iterating over all all XMLNotes and for every
"Object". ->property ("id") and ->value () allocates memory.
Adding 64 tracks to an empty session results in 528293 string
allocations and deallocations in XMLNode::property() taking ~30%
of the track creation time.
This commit XMLnode's const method to prevent memory allocation
and caches a pointer to the XMLNode* to skip iterating over object
state.