Beast 0.15.0 released



Beast version 0.15.0 is released.

Beast is a Free Software (LGPLv2+) music synthesizer and audio composer.

It provides a #MIDI #sequencer, unlimited undo, real-time #synthesis,
support for Linux #Audio Plugins (#LADSPA), Soundfont 2/3, WAV, AIFF,
Vorbis, Gus Patch, FLAC and MP3 files, 32bit audio rendering, full
duplex support, multi-core audio rendering and SIMD utilisation.

The source code is available via Git, the tarball and AppImage are here:

             https://beast.testbit.org/#downloads

After downloading and making the Beast AppImage executable, it can
run on any Ubuntu-18.04 or Fedora-28 compatible Linux system.

The new experimental ebeast UI can be started with:

    ./beast-0.15.0.x64.AppImage --ebeast

The release NEWS and shortlog are appended.

----

## Beast 0.15.0:                                        (2019-11-05)

#### System Requirements
* Linux - Ubuntu 18.04 or Fedora-28 are needed to run the Beast AppImage.

#### User Interface EBEAST
* Added Beast HTTP manual popup window.
* Added scrollable track view.
* Integrated material-icons and fork-awesome sprites.
* Added popup menus, modal dialog and preferences.
* Added proper command line argument handling to ebeast.
* Tracks now have a context menu with various editing functions.
* Support secondary UI via URL with auth-cookie.
* Support UI rendering in Firefox 68.
* Added song position pointer with realtime updates.
* Added bpm and song position counter display with realtime updates.
* Added focus handling for piano roll notes.
* Started file system selector for instrument assignments.
* Added user interface for manual PCM/MIDI driver selection.

#### Synthesis Changes
* Added support for separate fluidsynth instances per track. #102 [stw]
* Rewrote PCM driver integration and selection.
* Added optional PCM driver support for Jack. #128 [stw]

#### Jsonipc
* A dedicated Rapidjson based IPC layer was developed to move the synthesis
  engine out of the UI process (Electron based). This solved several major
    stability issues and also allowes use of Firefox for UI rendering.
    * Added Json based IPC layer between Javascript and C++17.
    * Moved Electron <-> Bse communication to Websocket-based IPC.
    * Moved BSE sound engine functionality into a separate executable
      BeastSoundEngine with async Javascript bindings.
      * Added a Websocket binary message bridge for realtime monitoring of
        shared memory region changes.

#### Upgrades
* Integrated Rapidjson 20190628 (> v1.1.0).
* Upgraded to Electron 6.0.11
* Upgraded babel to 7.6.2.
* Upgraded node-sass to 4.12.
* Managed to eliminate jQuery dependency.
* Depend on fluidsynth to 2.0.5. #108 [stw]
* The v8pp binding was superceeded by Jsonipc.
* Depend on pandoc >= 2.
* Depend on clang++-6 and g++-8.3.0 for full C++17 support.
* Updated CI builds to use Fedora-28.

#### Other Changes
* Modernized several property implementations. [stw] #109 #110 #112 #114 #115 #116 #117 #118
* Rewrote Vue data dependency integration for async Javascript calls.
* Several code areas got modernized, making use of C++ >= 11.
* Support proper versioning information even from Github ZIP files.
* Added PDF generation for the BSE API reference manual.
* Resampler cleanups. #121 [stw]
* Added new XML serialzation infrastructure (defaults to OFF, MVP roadmap goal).
* Added ZIP storage for BSE files (defaults to OFF, MVP roadmap goal).
* Added infrastructure for stereo device/effect chains (still disabled, MVP roadmap goal).


Stefan Westerfeld (86):
      BSE: Jack: some minor fixes as requested in review
      BSE: Jack: add list with possible improvements from PR#31.
      BSE: Driver: return read and write latency for a pcm driver separately
      BSE: bsemain.cc: block SIGPIPE to avoid crashes when jackd dies
      DOCS: add minimal jack howto
      BSE: Jack: initial version of Jack driver using the new driver API
      BUILD: require jack
      BSE: Resampler2: fix compilation with clang
      config-uname.mk: fix x86_64 specific build flags
      BSE: Resampler2: mark impl classes as final
      TESTS: testresampler: improve accuracy test coverage as slow test
      TESTS: testresampler: make perf test more reliable for small block sizes
      TESTS: testresampler: re-enable standalone tests via suite1
      TESTS: testresampler: use AlignedArray instead of F4Vector for alignment
      TESTS: adapt Resampler2 tests (namespace, enums)
      BSE: Resampler2: namespace/enum cleanups
      BSE: Resampler2: merge bseresamplerimpl.hh into bseresampler.cc
      TESTS: testresampler: avoid including bse/bseresamplerimpl.hh
      BSE: Resampler2: remove Resampler2::create
      TESTS: get rid of Resampler2::create
      BSE: Resampler2: improve C++ API to get rid of Resampler2::create
      BSE: Resampler2: small performance optimization for downsampler
      TOOLS: bsewavetool: remove unused resampler include
      TESTS: testresampler: re-enable tests for both: SSE and FPU Resampler
      TESTS: resamplehandle: test both: SSE/FPU version for delay compensation
      TESTS: testresamplerq: re-enable SSE tests (and still do FPU tests)
      BSE: Resampler2: properly support SSE again
      TESTS: no longer rely on block utils to create Resampler2 implementation
      BSE: no longer rely on block utils to create Resampler2 implementation
      TESTS: resamplehandle: remove Resampler C API test
      BSE: Resampler: remove C API
      BSE: Part::n_channels: port property to C++
      BEAST-GTK: use Part::last_tick C++ property
      BSE: Part::last_tick: port property to C++
      BSE: add Resampler2 function to reset state
      BEAST-GTK: bstapp: use Server::wave_file C++ property
      BSE: Server::wave_file: port property to C++
      BEAST-GTK: bstusermessage: use Server::log_messages C++ property
      BSE: Server::log_messages: port property to C++
      BSE: Super: remove copyright property
      BSE: Super: port author/license properties to C++
      BSE: bseitem: allow APPLY_IDL_PROPERTY for Strings and other types
      BEAST-GTK: bsttreestores: use seqid C++ property
      BSE: Item::seqid: port property to C++
      BEAST-GTK: use Project::dirty C++ property
      BSE: Project::dirty: port property to C++
      BEAST-GTK: bstcanvassource.cc: use Source pos_x/pos_y C++ property
      BSE: Source::pos_x/pos_y: port properties to C++
      BSE: MidiSynth: store volume_factor in impl class
      BSE: MidiSynth::volume_perc: port property to C++
      BSE: MidiSynth::volume_dB: port property to C++
      BSE: MidiSynth::volume_f: port property to C++
      BSE: MidiSynth::n_voices: port property to C++
      BSE: MidiSynth::midi_channel: port property to C++
      BSE: PcmOutput: properly update volume for engine module
      BSE: Song: fix access to C++ Track::muted property
      BEAST-GTK: bsttrackview: port track view notifications for C++ properties
      BEAST-GTK: bsttrackview: use n_voices C++ property
      BSE: Track::n_voices: port property to C++
      BEAST-GTK: bsttrackview: use midi_channel C++ property
      BSE: Track::midi_channel: port property to C++
      BEAST-GTK: bsttrackview: use muted C++ property
      BSE: Track::muted: port property to C++
      BSE: SF2: use fluid_synth_process() instead of deprecated function
      config-checks.mk: require the latest fluidsynth version, 2.0.5
      BEAST-GTK: bstbuseditor: refactor aida property / pspec code
      BSE: Song: port remaining Bus::master-output set calls
      BSE: Bus::master_output: port property to C++
      BEAST-GTK: bstbuseditor: use right_volume C++ property
      BSE: Bus::right_volume: port property to C++
      BEAST-GTK: bstbuseditor: use left_volume C++ property
      BSE: Bus::left_volume: port property to C++
      BSE: Bus::sync: port property to C++
      BSE: Bus::solo: port property to C++
      BEAST-GTK: bstbuseditor: support both, aida and old style properties
      BSE: Bus::mute: port property to C++
      BSE: SF2: avoid global using std::string
      BSE: SF2: disable automated locks that protect all fluid synth API calls
      BSE: SF2: cleanup sound sont repo code
      BSE: SF2: don't reload the soundfont every time the user presses play
      BSE: SF2: update documentation block.
      BSE: SF2: cleanup: fix leak, remove debugging output
      BSE: SF2: use module data free function
      BSE: SF2: remove unused mutex
      BSE: SF2: clean up old unused code
      BSE: SF2: use one fluid_synth_t per track

Tim Janik (622):
      NEWS.md: update NEWS for 0.15
      PO: updates for 'make dist'
      MISC: Makefile.mk: release-commits: check for master branch
      BSE: bseproject.cc: require BSE_FEATURE=xml-project for ZIP bse files
      BSE: bcore: add feature_check() for $BSE_FEATURE to toggle features
      BSE: bseproject.cc: xml_serialize() child tracks
      BSE: bsetrack: xml_serialize() child devices
      BSE: device: xml_serialize() the device type and child modules
      BSE: module: xml_serialize() the module type
      EBEAST: provide 'EQ' shorthand to compare objects
      EBEAST: b/deviceeditor.vue: show module id
      EBEAST: b/devicepanel.vue: show device id
      EBEAST: b/track-view.vue: update the current track on clicks
      EBEAST: b/projectshell.vue: add todo about treechange changes
      BSE: object.hh: whitespace fixups
      BSE: bsesong.hh: add SongImplP
      EBEAST: utilities.js: equals_recursively: compare OwnProperties and prototype
      BSE: object, bseobject: move xml_serialize, xml_reflink to ObjectImpl
      BSE: bseproject: add xml_serialize() and xml_reflink()
      BSE: bseproject: store project.xml in bse files via SerializableInterface
      BSE: bseobject: implement xml_serialize(), xml_reflink()
      BSE: serializable.hh: add Bse::SerializableInterface, Bse::SerializationNode
      BSE: bseproject: use zip_storage per-project and fix multi-imports
      BSE: bseproject.cc: load SCM files from ZIP vis Bse::Storage
      BSE: bseproject.cc: save .bse files as ZIP
      BSE: beast-sound-engine.hh: remove special casing for non-ObjectIface roots
      BSE: split BeastSoundEngine into 5 compilation units to speed up -j builds
      config-uname.mk: allow *.o compilation from generated *.c or *.cc
      AIDACC: JsonipcStub.py: allow -G nblocks=<int> to split output into sections
      EBEAST: b/deviceeditor.vue: add component with module list
      BSE: implement module listing and creation
      EBEAST: b/devicepanel.vue: show a device panel for the current track
      EBEAST: b/projectshell.vue: keep track of the `current_track`
      BSE: implement device listing and creation
      BSE: bseapi.idl: add Track API stubs for Device creation
      BSE: bseapi.idl: add Device API stubs for Module creation
      BSE: add interface Device stub
      BSE: add interface Module stub
      BSE: beast-sound-engine.cc: use FOREACH_IFACE_SEQ() to work around handle seq
      AIDACC: CxxStub.py: generate a *_FOREACH_IFACE_SEQ() macro
      BSE: bseapi.idl: derive interface DeviceCrawler from Object
      BSE: move properties and event emission from LegacyObject to Object
      BSE: introduce 'interface Object' as base for 'interface LegacyObject'
      BSE: introduce 'interface Object' as pure C++ base type
      BSE: rename 'interface Object' to 'interface LegacyObject'
      EBEAST: b/track-view.vue: implement 'delete-track'
      EBEAST: b/track-view.vue: implement 'add-track'
      BSE: bseapi.idl: implement Song.list_tracks()
      BSE: bseapi.idl: default to 1 voice per track, limit to 64
      BEAST-GTK: bstfiledialog.cc: pass project into store_bse()
      BSE: bseapi.idl: derive ContextMerger from Container
      EBEAST: b/projectshell.vue: use v-show for panel2 items
      EBEAST: b/projectshell.vue: make room for an alternative panel on 'Backquote'
      EBEAST: b/treeselector-item.vue: adjust arrow key matching
      EBEAST: utilities.js: add remove_hotkey/add_hotkey
      EBEAST: utilities.js: add keyboard_map_name()
      EBEAST: use KeyboardEvent.code to match hotkeys outside of INPUT fields
      MISC: Dockerfile-yum: provide unzip, required to unpack 3rd party libs
      BSE: path.cc: purify code to avoid g++-8 warnings
      MISC: Dockerfile-cibuild: provide unzip, required to unpack 3rd party libs
      BSE: serializable.hh: fix macro guards
      JSONIPC: jsonipc.hh: always use `static inline` except where ODR applies
      JSONIPC: jsonipc.hh: avoid linker emission of static class variables
      BSE: bseapi.idl: fix Const and comment placements
      BSE: beast-sound-engine.cc: fix unintended fallthrough for json numbers in Any
      BEAST-GTK: bstfiledialog.cc: fix NULL object reference
      EBEAST: menus.js: fix error constant checks against promise
      EBEAST: b/projectshell.vue: show error dialog if open fails
      TOOLS: magictest.cc: remove test magic for .bse file types
      TOOLS: bsetool.cc: support -h and --help
      BSE: storage: add has_file() and move_to_temporary()
      BSE: path: add Path::split_extension()
      BSE: storage: use FileMagic to identify ZIP/SCM files
      BSE: storage.cc: implemenmt import_from()
      BSE: storage: add API to read files from container
      BSE: storage.cc: implement export_as()
      BSE: storage: add API to store files in container
      BSE: bsestorage.cc: shorten temporary storage-blob filename
      BSE: bsestorage: use beastbse_cachedir_current() for temporary files
      EBEAST: app.html: after startup, purge_stale_cachedirs()
      BEAST-GTK: bstmain.cc: at startup, purge_stale_cachedirs()
      BSE: bseapi.idl: add Server.purge_stale_cachedirs()
      BSE: bsestorage: add beastbse_cachedir_current()
      BSE: bsemain.cc: limit after-quit event loop processing
      BSE: beast-sound-engine.cc: correctly stop server and websocket connections
      BSE: beast-sound-engine.cc: keep track of opened websocket connections
      BSE: storage: add beastbse_cachedir_create() and beastbse_cachedir_cleanup()
      BSE: sfistore: remove unused functions
      BSE: minizip: integrate ZIP functionality from minizip-2.9.0
      BSE: Makefile.mk: fetch ZIP sources from minizip-2.9.0
      BSE: integrity.cc: sort integrity tests by function name
      config-uname.mk: MODE=debug: add -gdwarf-4 for variable tracking
      BSE: remove now unused serialize.cc, serialize.hh
      TESTS: checkserialize.cc: move to testing Xms::SerializableInterface
      BSE: bsemain.cc: parse and store bserc.xml via Xms::SerializableInterface
      BSE: serializable: add Xms::SerializableInterface, Xms::SerializationNode
      BSE: bseapi.idl: renumber Bse::Error
      DOCS: Makefile.mk: build doc/bse-api.pdf with doxygen and latex
      DOCS: refman.patch: fix font, sizing, vertical spacing, link colors, page numbering
      DOCS: doxygen.cfg: customize for latex & PDF generation
      DOCS: extrastyles.css: fix member list table formatting
      BSE: cxxaux.hh: remove bogus docu group
      AIDACC: CxxStub.py: add DOXYGEN infos about interface <- Iface <- Impl
      BSE: magic: rename from gslmagic.*
      BSE: port Magic matching to modern C++
      TOOLS: magictest.cc: print Bse::FileMagic matches and find .bse files
      BSE: bseloader.cc: register magic specs as Bse::FileMagic
      BSE: gslmagic: add Bse::FileMagic implementation in C++
      BSE: path: support maxlen for stringread() and memread()
      EBEAST: app.html: provide console inside Vue component handlers
      EBEAST: main.js: provide webContents with printout() and printerr()
      EBEAST: app.html: allow UI script before loading command line files
      EBEAST: b/fed-object.vue: allow CSS styling by field name
      EBEAST: support --norc -p <driver> and -m <driver> command line args
      Makefile.mk: help: mention config-defaults.mk for CXXFLAGS
      EBEAST: package.json.in: upgrade electron to 6.0.11
      EBEAST: package.json.in: upgrade babel to 7.6.2
      EBEAST: remove jQuery (now unused)
      EBEAST: package.json.in: upgrade node-sass to 4.12
      EBEAST: window.html: remove unused file
      EBEAST: b/preferencesdialog.vue: speed up feedback for invalid/locked settings
      BSE: bsemain.cc: fix stale config values and refuse to change locked config
      EBEAST: b/playcontrols.vue: use "Space" to toggle playback and 'S' for stop
      EBEAST: b/modaldialog.vue: use hflex for header and footer
      EBEAST: b/contextmenu.vue: support tieclass, to a tie a class during popup
      EBEAST: utilities.js: add clear_keyboard_click()
      EBEAST: b/flex.vue: turn hflex and vflex into functional components
      EBEAST: b/fed-picklist.vue: fix focus flicker for clicks on inactive elements
      EBEAST: utilities.js: add is_nav_input() and refine arrow key focus
      EBEAST: automatically support buttons clicks though a data-hotkey attribute
      EBEAST: b/button.vue: turn b-button into a functional component
      EBEAST: b/hotkeys.js: remove jQuery based hotkey handling
      EBEAST: utilities.js: move navigation_keys to inner scope
      EBEAST: utilities.js: fix focus handling at startup without last_focus set
      EBEAST: utilities.js: add LINEFEED as KeyCode
      EBEAST: utilities.js: add join_classes() helper
      EBEAST: b/treeselector.vue: remove unused table styling
      EBEAST: b/aboutdialog.vue: use grid for layout
      EBEAST: b/piano-roll.vue: fix keydown handler on b-flex
      EBEAST: variables.scss: reduce font size to align with other desktop apps
      EBEAST: b/fed-object.vue: use b-grid for field layout
      EBEAST: b/grid.vue: add functional component for `display: grid` elements
      BEAST-GTK: bstmain.cc: document '-p' and '-m' only briefly
      BSE: bsemain.cc: support '-p' and '-m' for default driver selection
      EBEAST: b/preferencesdialog.vue: remove menu test code
      EBEAST: utilities.js: prevent Up/Down focus changes from also scrolling
      EBEAST: b/contextmenu.vue: fix menuitem checks within functional components
      EBEAST: Util.ResizeObserver: simplify FallbackResizeObserver
      EBEAST: b/contextmenu.vue: fix re-positioning loops
      EBEAST: b/preferencesdialog.vue: rmeove unused mixin
      EBEAST: b/aboutdialog.vue: show dialog via v-model
      EBEAST: use secondary/warning/notice colors for picklist details
      BSE: driver-alsa.cc: give a Note about PulseAudio, rather than a Warning
      EBEAST: b/preferencesdialog.vue: provide notice / warning colorizations
      EBEAST: b/fed-picklist.vue: support icon/label/line CSS classes
      EBEAST: b/menuitem.vue: support iconclass property
      EBEAST: b/icon.vue: support iconclass property
      EBEAST: b/flex.vue: simplify classlist handling
      BSE: driver.cc: PCM Null: warn about lack of playback timing
      EBEAST: b/contextmenu.vue: avoid repeated resize_observer iterations
      EBEAST: b/contextmenu.vue: use dom_update, dom_destroy
      EBEAST: app.html: always add vue_mixins.dom_updates and vue_mixins.data_tmpl
      EBEAST: b/mixins.scss: rename from styles.scss
      EBEAST: cssaux.scss: move and turn into a helper for variables.scss
      EBEAST: b/flex.vue: turn b-hflex, b-vflex into slim functional components
      EBEAST: b/bundle.js: allow *.vue files without module.exports component
      EBEAST: b/fed-picklist.vue: support menu popup via 'click' and 'mousedown'
      EBEAST: b/contextmenu.vue: support drag-selection on 'mousedown' popups
      EBEAST: b/fed-picklist.vue: remove <label/> and <input/> form elements
      EBEAST: utilities.js: swallow_event: fix event type
      EBEAST: b/projectshell.vue: use v-model to adjust show_preferences_dialog
      EBEAST: b/preferencesdialog.vue: forward v-model and reload on popup
      EBEAST: b/modaldialog.vue: fix modal shield, use v-model for popup flag
      EBEAST: b/fed-picklist.vue: popup on mousedown and fix styles
      EBEAST: b/contextmenu.vue: fix modal shield and positioning, add transitions
      EBEAST: b/color-picker.vue: fix modal shield and positioning, add transitions
      EBEAST: utilities.js: change modal_shield() to reparent and allow styling
      EBEAST: b/fed-text.vue: use b-style-inset like number inputs
      EBEAST: variables.scss: add b-style-modal-overlay for overlay backgrounds
      EBEAST: b/color-picker.vue: use style/template/script order
      EBEAST: utilities.js: fix focus stacking and display==none check
      EBEAST: b/preferencesdialog.vue: create picklistitems from PCM/MIDI drivers
      EBEAST: b/fed-object.vue: use b-picklist for fields with .picklistitems
      EBEAST: b/fed-picklist.vue: add b-picklist component
      EBEAST: b/fed-object.vue: add support for __fieldhooks__ metadata
      EBEAST: b/fed-number.vue: utilize b-style-number-input and b-style-hrange-input
      EBEAST: Makefile.mk: provide spinners.svg for b-style-number-input
      EBEAST: variables.scss: add b-style-number-input
      EBEAST: variables.scss: add b-style-light-foreground
      EBEAST: variables.scss: add b-style-hrange-input mixin
      EBEAST: variables.scss: add b-style-inset and b-style-outset mixins
      EBEAST: variables.scss: provide b-style-focus-color and b-style-border-radius
      EBEAST: variables.scss: slightly darken the main background
      EBEAST: b/contextmenu.vue: rename .popup() and fix positioning
      EBEAST: b/modaldialog.vue: avoid double destroy calls
      BSE: driver-alsa.cc: scrap redundant device info
      BSE: add pcm_driver and midi_driver to 'record Configuration'
      EBEAST: utilities.js: vue_observable_from_getters: de-dup equal results
      EBEAST: utilities.js: equals_recursively: require equal for..in order
      EBEAST: utilities.js: guard ModalShield against double-destroy
      BSE: driver-alsa.cc: fill audio buffer by writing exact period sizes
      EBEAST: b/preferencesdialog.vue: add driver selection menu
      EBEAST: b/menuitem.vue: forward the `ic` property to b-icon
      EBEAST: b/icon.vue: support prefixed icons via the `ic` property
      MISC: Dockerfile-cibuild: build CI and AppImage against libjack-dev 0.125
      BSE: add major.minor.micro to BeastSoundEngine
      BSE: Makefile.mk: conditionally compile libbse-jack-x.y.z.so
      config-checks.mk: check if jack.pc >= 0.124.0 is present
      BSE: driver.cc: be silent about libbse-jack loading errors
      BSE: driver.cc: add libbse-jack-x.y.z.so loader code
      BSE: bsemain: add register_driver_loader() and load-drivers option
      BSE: driver-jack.cc: assign device_name, capabilities, device_info, notice
      BSE: driver-alsa.cc: adjust capabilities listing
      BSE: bseapi.idl: add to DriverEntry: device_name, capabilities, device_info, modem
      BSE: driver-jack.cc: improve device description strings
      BSE: driver: use DriverEntry and DriverEntrySeq
      BSE: bseapi.idl: add list_pcm_drivers / list_midi_drivers
      BSE: driver-jack.cc: remove duplicate debug prefix
      BSE: driver-alsa.cc: fix buffer for pcm writes during retrigger, fixes #127
      BSE: driver: add driver name to devid entries
      BSE: bseserver.cc: fallback to "null" MIDI driver if no MIDI device is present
      BSE: strings: add kvpair_key() and kvpair_value()
      TESTS: basics.cc: rename file (from aida-basics.cc)
      TESTS: suite1-main.cc: NEVER inline prototypes, ALWAYS use a header file!
      TESTS: use 'null' PCM driver without arguments
      BSE: driver: add 'null' PCM and 'null' MIDI driver
      BSE: bsedevice*: remove unused source files
      BSE: support "auto" driver selection for PCM and MIDI
      BSE: Makefile.mk: stop compiling old device code
      BSE: bsemain.cc: stop listing old devices
      BSE: remove unused  MIDI device code
      BSE: remove old OSS device code
      DRIVERS: remove old MIDI device code
      BSE: bseserver: use the new MIDI Driver
      BSE: driver-alsa.cc: implement AlsaMidiDriver
      BSE: bsemain.cc: print MIDI driver list
      BSE: driver-alsa.cc: prefix all PCM related functions
      BSE: driver-alsa.cc: use "alsa" as debug key
      BSE: driver: add MidiDriver base type for MIDI drivers to derive from
      BSE: introduce PcmDriver base type for PCM drivers to derive from
      DRIVERS: remove old PCM device code
      BSE: bseserver, bsepcmmodule: use the new PCM Driver
      BSE: driver: fix open(), add pcm_frequency()
      BSE: bseserver.hh: reformat bse_server_*() decls
      BSE: driver: rename config.block_length
      BSE: driver: add pcm_read and pcm_write
      BSE: driver-alsa.cc: reduce init code
      BSE: driver: add pcm_latency()
      BSE: driver: add pcm_check_io()
      BSE: driver: add pcm_retrigger()
      BSE: driver-alsa.cc: implement open/close
      BSE: driver: add DriverConfig, ctor, dtor
      BSE: Makefile.mk: compile ALSA driver and link against -lasound
      BSE: driver-alsa.cc: start ALSA driver, list available PCM drivers
      BSE: bsemain.cc: print PCM driver list
      BSE: driver: start new Bse::Driver infractructure
      MISC: Dockerfile-yum: install missing `patch` utility
      EBEAST: b/preferencesdialog.vue: move to await and observable_from_getters()
      EBEAST: b/fed-object.vue: implement reactivity with observable_from_getters()
      EBEAST: utilities.js: properly filter display:none elements in list_focusables
      EBEAST: Makefile.mk: fix *.vue line numbers in vueify/lib/compiler.js
      BSE: bseapi.idl: provide Object.find_typedata()
      AIDACC: CxxStub.py: avoid useless __typedata__ vector copy
      AIDACC: aida.cc: guard against missing auxentries
      EBEAST: utilities.js: avoid UP/DOWN focus movement for stepUp/stepDown elements
      JSONIPC: jsonipc.hh: add __typename__ to Serializable
      .travis.yml: upgrade builds to Fedora-28, which has g++-8
      MISC: Dockerfile-cibuild: install and switch to g++-8 before compiling
      BSE: devicecrawler.cc: remove g++ 7.4.0 experimental/filesystem workaround
      JSONIPC: jsonipc.hh: fix g++-8 missing-prototype warning by inlining
      BSE: bsetype.hh: fix g++-8 parentheses warning
      BSE: bseserver.cc: fix g++-8 signedness complaints
      BEAST-GTK: gxk/gxkglobals.hh: ignore -Wparentheses in Gtk+ headers
      AIDACC: CxxStub.py: remove __accept__() generation, use __visit__()
      BSE: sfivisitors.hh: use __visit__() (not __accept__)
      AIDACC: visitor.hh: use __visit__ instead of __accept__
      AIDACC: replace Has__accept__<>() with Has___visit__<>()
      AIDACC: aida.cc: silence g++-8 unused-variable warning
      config-uname.mk: introduce a hard dependency on g++ >= 8.3.0
      Makefile.mk: default to 'production' if MODE is unspecified
      BUILD: rename optimized build mode, use: make default MODE=production
      EBEAST: b/projectshell.vue: integrate positionview
      EBEAST: add positionview to display time, signature, bars and beats
      EBEAST: utilities.js: add strpad()
      EBEAST: b/part-thumb.vue: add slight shading to distinguish parts
      EBEAST: Makefile.mk: Upgrade font to Inter-3.10
      EBEAST: b/treeselector-item.vue: add left/right focus movement
      EBEAST: b/treeselector.vue: pick up device crawler data in create_data()
      EBEAST: b/projectshell.vue: scroll sidebar
      BSE: add devicecrawler.*, implenment interface DeviceCrawler
      AIDACC: Parser.g: allow 'type' as field name
      EBEAST: b/treeselector-item.vue: use smaller open/filled arrows for expand
      EBEAST: b/treeselector.vue: keep focus handling inside container
      EBEAST: b/projectshell.vue: add padding to sidebar
      EBEAST: b/projectshell.vue: add handle to resize sidebar
      EBEAST: variables.scss: add resize handle values
      EBEAST: b/piano-roll.vue: use flex containers, optimize scrollarea
      EBEAST: b/projectshell.vue: use flex containers
      EBEAST: b/track-list.vue: use flex containers
      EBEAST: b/flex.vue: use numeric grow<n> and shrink<n> properties
      EBEAST: app.html: expand root element and constrain minimum size
      EBEAST: app.scss: add .hflex .vflex .grow0 .grow* .shrink0 .shrink* classes
      EBEAST: b/contextmenu.vue: cleanup resize_observer via destroy()
      EBEAST: utilities.js: fix resize_observer() bookkeeping
      EBEAST: use consistent license headings
      EBEAST: b/projectshell.vue: add tree selector to right sidebar
      EBEAST: b/treeselector.vue: add b-treeselector, use b-treeselector-item
      EBEAST: b/treeselector-item.vue: add a b-treeselector-item
      BSE: bseserver.cc: acocunt for *aligned* sizes in allocator assertion
      BSE: bsetrack: emit "changed" on "notify:last_tick" of any linked part
      BSE: bseobject.cc: emit notify:icon on icon changes
      BSE: bseapi-inserts.hh: on(): use ObjectImpl->__attach__() for connecting
      BSE: bsedevice.cc: support BSE_DEBUG=snd to debug sound device opening
      BSE: sfistore: fix seek error for files with binary appendix
      EBEAST: b/piano-roll.vue:focus note on click and with arrow keys
      EBEAST: b/piano-roll.vue: span 11 octaves, like other DAWs
      EBEAST: b/piano-roll.vue: allow focus, draw focus note and freeze pnotes
      EBEAST: b/projectshell.vue: add padding for focus-outline
      EBEAST: b/styles.scss: add focus-outline-width and note-focus-color
      EBEAST: utilities.js: add promise_state()
      EBEAST: utilities.js: export in_array()
      EBEAST: app.html: set `inheritAttrs: false` for all Vue components
      JSONIPC: jsonipc.hh: freeze JS classes after initialization
      EBEAST: jsbse.js: provide an empty Bse.server during async initialization
      TESTS: audio/Makefile.mk: lower sum-diff-test threshold to avoid CI trip-ups
      BSE: randomhash.hh: remove fnv1a_consthash64(std::string) variant
      EBEAST: b/part-thumb.vue: freeze immutable allnotes, no need to observe
      EBEAST: utilities.js: resize_canvas: return the devicepixelratio
      EBEAST: b/piano-roll.vue: swap <style/> and <template/> sections
      EBEAST: b/piano-roll.vue: move to await and observable_from_getters()
      BSE: bsepart.cc: emit notify:last_tick, noteschanged, linkschanged events
      EBEAST: b/part-thumb.vue: move to observable_from_getters()
      EBEAST: vue_observable_from_getters(): gracefully handle missing getter
      EBEAST: b/track-view.vue: use dom_animate_playback()
      EBEAST: b/track-list.vue: use dom_animate_playback()
      EBEAST: utilities.js: add dom_animate_playback() to vue_mixins.dom_updates
      EBEAST: vue_observable_from_getters: only call getter if !!predicate
      EBEAST: b/track-list.vue: use Vue.observable_from_getters() for Bse.Song
      EBEAST: utilities.js: re-add async-warning for dom_update
      EBEAST: b/track-list.vue: remove unused attr
      EBEAST: b/track-view.vue: use Vue.observable_from_getters() for Bse.Track
      EBEAST: provide Vue.observable_from_getters() for async getters with signals
      EBEAST: return `disconnect()` function from Bse.ObjectIface.on()
      EBEAST: b/track-view.vue: use explicit setup/cleanup code for async track API
      EBEAST: b/track-list.vue: properly handle await queries and cleanups
      EBEAST: utilities.js: add support for `priv_tmpl` to vue_mixins.data_tmpl
      EBEAST: utilities.js: add copy_recursively() for Arrays and simple Objects
      EBEAST: utilities.js: add equals_recursively()
      EBEAST: utilities.js: add discard_remote() stub
      EBEAST: utilities.js: track this.dom_update() calls reactively
      EBEAST: utilities.js: work around Firefox lacking setImmediate()
      EBEAST: utilities.js: batch shm_reschedule() requests during the same tick
      EBEAST: utilities.js: cleanup ShmFragmentSeq for broadcast_shm_fragments()
      EBEAST: utilities.js: fix missing initial call_frame_handlers()
      EBEAST: b/part-thumb.vue: optimize redraws via batch-await before updating
      EBEAST: b/part-thumb.vue: fix vertical note orientation
      EBEAST: b/part-thumb.vue: properly scale font-size and note thickness
      EBEAST: b/part-thumb.vue: adjust canvas size to match hardware pixels
      EBEAST: b/part-thumb.vue: use await for part.get_last_tick()
      EBEAST: adjust part thumbnail colors and style
      EBEAST: b/track-list.vue: fix tick position subscription setup
      EBEAST: b/track-list.vue: avoid tick pointer layout being cut-off
      EBEAST: b/track-list.vue: add song position pointer, synced to Song
      EBEAST: utilities.js: fix shm_unsubscribe()
      EBEAST: utilities.js: remove old array_fields_* code
      EBEAST: eliminate shm_id handling
      BEAST-GTK: eliminate shm_id
      BSE: eliminate shm_id, only one shared memory area is supported by Bse.server
      EBEAST: b/track-view.vue: remove old Util.array_fields_* handling
      BSE: add Song.get_shm_offset and SongTelemetry to monitor tick pointer
      BSE: beast-sound-engine.cc: add debug code for extended binary watching
      EBEAST: b/track-view.vue: use Bse.MonitorField enum values instead of constants
      BEAST-GTK: fix Bse.SignalMonitor.get_shm_offset() calls
      BSE: add probe field to Bse.SignalMonitor.get_shm_offset()
      BSE: bseapi.idl: fix SignalMonitor documentation
      EBEAST: b/track-view.vue: use dom_updates to manage frame_handler lifetime
      EBEAST: use new vue_mixins.dom_updates with dom_create, dom_update, dom_destroy
      EBEAST: jsbse.js: handle $jsonipc.onbinary via Util.shm_receive()
      EBEAST: utilities.js: exports shm_{un}subscribe() and shm_array_<type>
      EBEAST: b/track-view.vue: use Util.shm_subscribe() for dB-meter updates
      JSONIPC: head.js: allow 'arraybuffer' message handling via onbinary
      EBEAST: main.js: pass --binary along to BeastSoundEngine
      BSE: beast-sound-engine.cc: implement Bse::IpcHandler for binary messages
      BSE: beast-sound-engine.cc: print 404 errors unconditionally
      BSE: add Server.broadcast_shm_fragments() to get binary shm updates
      BSE: bseglobals: add exec_handler_clear() to remove timers
      BSE: randomhash.hh: add fnv1a_consthash64() for std::string and arbitrary lengths
      BSE: cxxaux.hh: add constexpr_equals()
      EBEAST: utilities.js: use await in frame handler updates
      EBEAST: b/projectshell.vue: auto-"load" the *last* project on startup
      BSE: beast-sound-engine.cc: clean up event handlers on stale connections
      BSE: bseapi.idl: add Bse.server.last_project()
      EBEAST: menus.js: allow BrowserWindow local menus
      EBEAST: menus.js: load beast-manual through http requests
      EBEAST: Makefile.mk: include doc/ via app/doc/ symlink
      BSE: beast-sound-engine.cc: permit http file requests for app/ and doc/
      BSE: beast-sound-engine.cc: add image mime types
      EBEAST: b/track-view.vue: fix text input positioning buglet in gecko
      EBEAST: app.html: support [chrome] and [gecko] selectors for <html/>
      EBEAST: b/contextmenu.vue: use Util.resize_observer()
      EBEAST: use the same defaults for <html/> and BrowserWindowDefaults
      EBEAST: authenticate subprotocol via URL query string
      EBEAST: app.html: provide MAINCONFIG.args default
      BSE: beast-sound-engine.cc: authenticate subprotocol via URL query string
      EBEAST: b/track-view.vue: fix midi_channel assignemnt
      JSONIPC: jsonipc.hh: use getter/setter method to avoid 'async get' properties
      EBEAST: main.js: add TODO about closing manual window
      EBEAST: package.json.in: upgrade to latest Electron stable version, 6.0.1
      EBEAST: package.json.in: update minimum  vue, jquery and eslint versions
      EBEAST: package.json.in: update babel/chrome target to 66
      EBEAST: b/projectshell.vue: ensure a song has a connected Master track
      EBEAST: b/track-view.vue: assign midi_channel via menu and disable items
      EBEAST: b/contextmenu.vue: add 'check' callback to open() to disable items
      EBEAST: b/menuitem.vue: allow menudata.checkedroles to override disabled
      EBEAST: b/track-view.vue: add example menu for track editing
      EBEAST: b/track-view.vue: use text input to edit track names
      EBEAST: b/projectshell.vue: ensure projects have a song with master bus
      BSE: bsestorage.cc: scanner_parse_paren_rest() can only read whole files
      BSE: sfistore: allow only whole file reads via open() or input_text()
      BEAST-GTK: use sfi_rstore_new_open() instead of file descriptor feeding
      EXTERNAL: v8pp: remove (now unused) v8pp/ project
      EBEAST: remove v8bse code and buildrules
      BSE: bseitem.cc: remove unused bse_item_{get|set}_property_internal()
      BSE: beast-sound-engine.cc: properly bind Aida::Event as AnyRec
      BSE: beast-sound-engine.cc: convert between Any and C++ classes
      AIDACC: JsonipcStub.py: register Aida::ImplicitBase as parent for base classes
      BSE: beast-sound-engine.cc: implement Convert<Any> for most types
      MISC: bintray.sh: add scriptname prefix
      .travis.yml: do not provide .bintray_api_key for pull requests
      MISC: Makefile.mk: require .bintray_api_key for uploads
      MISC: bintray.sh: add --skip to exit gracefully if API key is missing
      MISC: Dockerfile-yum: upgrade dependencies
      MISC: Makefile.mk: build beast AppImage in out/
      MISC: cibuild.sh: use timjanik/beast:cibase-190807-bionic as CI base image
      MISC: Dockerfile-bionic: upgrade dependenccies and optimize image
      EBEAST: app.html: load command line files
      EBEAST: app.html: allow async menu initialisation
      EBEAST: menus.js: handle async functions with await
      BSE: beast-sound-engine.cc: randomize subprotocol for true authentication
      EBEAST: jsbse.js: derive ws:// from current host + port
      EBEAST: app.html: setup window.MAINCONFIG
      EBEAST: main.js: force non-0 exit status for SIGINT, SIGHUP, SIGTERM
      EBEAST: main.js: spawn BeastSoundEngine --embed and add clean shutdown
      BSE: beast-sound-engine.cc: allow embedding via control pipe
      EBEAST: menus.js: use Electron.app.exit() b/c Electron abuses quit() for signals
      EBEAST: b/projectshell.vue: move b-aboutdialog and b-preferencesdialog here
      EBEAST: menus.js: use 'export' statement for Browser modules
      EBEAST: main.js: rename global CONFIG, load app.html
      EBEAST: app.html: rename CONFIG, add DevTools key, load menus for Electron
      EBEAST: Makefile.mk: circumvent eslint bug, rename global CONFIG
      EBEAST: using CONFIG constants
      EBEAST: b/aboutdialog.vue: use CONFIG and make nodejs info optional
      EBEAST: b/icon.vue: fix vertical alignment
      EBEAST: app.html: fix jQuery, install GLOBALCONFIG and show b-projectshell
      BSE: beast-sound-engine: colorize error replies
      EBEAST: provide fallback ResizeObserver, based on window.onresize
      EBEAST: utilities.js: for now, provide shm dummy
      EBEAST: jsbse.js: add await to (unused) test code
      EBEAST: b/track-view.vue: handle async functions with await
      EBEAST: b/part-thumb.vue: handle async functions with await
      EBEAST: b/part-list.vue: handle async functions with await
      BSE: beast-sound-engine: manually convert Aida::RemoteMember<Bse::PartHandle>
      AIDACC: JsonipcStub.py: use Jsonipc::Serializable<>
      BSE: beast-sound-engine: use Jsonipc::ClassPrinter::recording() for --js-bseapi
      EBEAST: b/track-view.vue: use await fro track method calls
      EBEAST: b/track-list.vue: use await when listing tracks
      BSE: beast-sound-engine: fix CallbackInfo references
      BSE: bseserver: print BSE:UserMessage to stderr for minimal handling
      AIDACC: JsonipcStub.py: use .serializable() for records
      EBEAST: b/projectshell.vue: fix missing title updates
      EBEAST: jsbse.js: add on() and off() to Bse.ObjectIface
      BSE: beast-sound-engine: handle Bse/EventHub/connect & disconnect
      EBEAST: b/track-list.vue: use await to query track lists
      EBEAST: b/projectshell.vue: use await for BSE methods
      EBEAST: .eslintrc.js: fix missing $log symbol
      BSE: beast-sound-engine: load BSE assets
      BSE: beast-sound-engine: manually convert Handle sequence into shared_ptr vectors
      EBEAST: app.html: re-activate b-projectshell
      BSE: beast-sound-engine: use Jsonipc::ClassPrinter::to_string()
      AIDACC: JsonipcStub.py: register enum values
      AIDACC: JsonipcStub.py: generate binding calls for Jsonipc
      BSE: beast-sound-engine: call Bse_jsonipc_stub() from bseapi_jsonipc.cc
      BSE: Makefile.mk: generate bseapi_jsonipc.cc with JsonipcStub.py
      EBEAST: generate bseapi_jsonipc.js, using jsonipc/head.js
      EBEAST: jsbse.js: properly pass object ids
      EBEAST: jsbse.js: re-define Bse.server.$id for initialization
      EBEAST: b/bundle.js, jsbse.js: move and disable failing tests
      EBEAST: jsbse.js: add JSON ipc marshalling code for BSE
      EBEAST: Makefile.mk: generate js_bseapi.js with BeastSoundEngine
      EBEAST: app.html: rewrite application startpoint
      EBEAST: utilities.js: turn into a javascript module, using "export"
      EBEAST: utilities.js: move utilities.js here
      Makefile.mk: distversion: fix use before assignment
      BSE: beast-sound-engine: send Bse.serevr on $jsonipc.initialize
      BSE: beast-sound-engine: fix missing allocator in to_json()
      BSE: beast-sound-engine: bind Bse::ServerIface, for which we have a wrapper
      BSE: beast-sound-engine: add '--js-bseapi' to print out the BSE Javascript glue
      BSE: beast-sound-engine: redirect to app.html
      BSE: beast-sound-engine: serve HTTP requests for ondisk files from app/
      BSE: beast-sound-engine: handle HTTP requests on /
      BSE: beast-sound-engine: support --verbose
      BSE: beast-sound-engine: include jsonbindings.cc and hand out BseServer
      BSE: beast-sound-engine: add JS example comment for echo tests
      BSE: beast-sound-engine: require (example) auth string for connections
      BSE: beast-sound-engine: print connection Id
      BSE: beast-sound-engine: handle requests with Jsonipc::IpcDispatcher
      BSE: regex: add Re::search()
      BSE: beast-sound-engine: add tiny bit of color
      BSE: beast-sound-engine: implement simple websocket echo server
      BSE: beast-sound-engine: include non-tls websocketpp server
      config-checks.mk: provide $BOOST_SYSTEM_LIBS for BeastSoundEngine
      BSE: add beast-sound-engine.cc to build lib/BeastSoundEngine executable
      JSONIPC: jsonipc.hh: add restrictions to IsWrappableClass<> to satisfy g++-7.4
      JSONIPC: head.js: add marshalling code for Javascript
      TESTS: integrate jsonipc/testjsonipc.cc:test_jsonipc()
      JSONIPC: Makefile: build testjsonipc
      JSONIPC: testjsonipc: add simple jsonipc test program
      JSONIPC: jsonipc.hh: add binding to use C++ struct APIs via JSON messages
      WEBSOCKETPP: fix 'noexcept' specifier
      Squashed 'external/websocketpp/' content from commit 13fec9f30
      Squashed 'external/rapidjson/' changes from 08eb814e4..bd79eae15
      Squashed 'external/rapidjson/' content from commit 08eb814e4
      EBEAST: b/utilities.js: add 'Vue-v-inlineblur' directive
      EBEAST: b/menuitem.vue: adjust layout inside menurow
      EBEAST: b/menurow.vue: add component to pack Menuitems horizontally
      EBEAST: b/contextmenu.vue: fix FocusGuard interfering with menuitem actions
      EBEAST: b/contextmenu.vue: add box-shadow
      EBEAST: b/menutitle.vue: add component for menu titles
      EBEAST: b/menuseparator.vue: add separator for menus
      EBEAST: b/menuitem.vue: adjust selector specificity and border
      EBEAST: b/contextmenu.vue: adjust selector specificity and padding
      EBEAST: variables.scss: provide more menu styles
      EBEAST: b/track-view.vue: fix style/template/script order
      EBEAST: b/contextmenu.vue: provide menudata and fix events on disabled items
      EBEAST: b/menuitem.vue: add menuitem component for use in contextmenu
      EBEAST: b/contextmenu.vue: add component for popup menus
      EBEAST: variables.scss: provide basic b-menu-* styles
      EBEAST: b/utilities.js: reimplement FocusGuard via event handlers
      EBEAST: b/utilities.js: warn about swapping the `data_tmpl` field name
      EBEAST: b/utilities.js: allow popup positioning at mouse pointer
      EBEAST: b/utilities.js: popup_position(): calculate popup positions
      EBEAST: b/utilities.js: allow modal shield background customization
      EBEAST: b/utilities.js: prevent mousedown3+contextmenu to re-popup menus
      EBEAST: b/utilities.js: refactor focus cycling and modals into JS classes
      EBEAST: b/utilities.js: add fwdprovide() to forward ancestor properties
      EBEAST: b/utilities.js: comment fixups
      EBEAST: move main CSS color specs into variables.scss:
      EBEAST: b/vflex.vue: add container for vertical layouting
      EBEAST: b/hflex.vue: container for horizontal layouting
      EBEAST: b/flex.vue: add container for horizontal or vertical layouting
      EBEAST: window.html: fix argument processing
      EBEAST: introduce GLOBALCONFIG to pass configs from main.js to the renderer
      DOCS: rename @BUILDVERSION@ substitution
      config-checks.mk: remove unused VERSION_LONG
      BSE: Makefile.mk: avoid generating unused buildid.cc
      BSE: remove version_buildid(), instead use Bse::version()
      MISC: Makefile.mk: make distversion (version.sh -l) local to appimage and bintray
      TOOLS: bsetool: remove buildid
      BEAST-GTK: bstmain: remove buildid everywhere and stick to Bse::version()
      Makefile.mk: make distversion (version.sh -l) local to dist and distcheck
      config-checks.mk: get rid of unused VERSION_DATE
      DOCS: Makefile.mk: call `./version.sh -d` on demand
      BSE: remove version_date() from API
      TOOLS: bsetool: remove version_date() from output
      version.sh: fix short version if git is present
      EBEAST: window.html: load BSE files from the command line
      EBEAST: menus.js: print loading error to console
      EBEAST: window.html: fix Vue / utilities dependency and provide $log
      EBEAST: b/playcontrols.vue: remove old CSS
      EBEAST: b/part-list.vue: fix double include
      EBEAST: b/hotkeys.js: fix keyboard activation of jQuery element
      EBEAST: b/utilities.js: guard against multiple instantiations
      EBEAST: menus.js: fix manual browser back/forward keys
      EBEAST: main.js: explicitely enable nodeIntegration
      EBEAST: main.js: disable experimentalFeatures which we don't use
      EBEAST: remove electron-devtools-installer/VUEJS_DEVTOOLS which causes crashes
      EBEAST: v8bse/Makefile.mk: silence excessive V8 deprecation warnings
      EBEAST: v8bse/Makefile.mk: relax version matches and update electron header URL
      EBEAST: b/icon.vue: upgrade to use the Fork-Awesome-1.1.7 WOFF2 file
      EBEAST: Makefile.mk: provide the Fork-Awesome-1.1.7 woff2 and CSS files
      EBEAST: b/icon.vue: add unicode symbols via :uc and material icons via :mi
      EBEAST: Makefile.mk: provide woff2 and CSS from material-icons-190326.1
      EBEAST: b/icon.vue: fix nosize attribute
      EBEAST: change vc-* references to b-*
      EBEAST: Makefile.mk: change vc/ to b/
      EBEAST: b/: change vc-* prefix to b-*
      EBEAST: b/: rename beast vue component directory from vc/ to b/
      Squashed 'external/v8pp/' changes from 792dd225f..f2720534b
      EBEAST: v8pp_property: add v8pp::property wrapper for getter/setter pairs
      EBEAST: v8bse/V8Stub.py: check result from v8::Script::Compile()->Run()
      EBEAST: v8bse/nodemodule: add "v8pp/persistent.hpp" include
      EBEAST: v8bse/nodemodule: use `v8::Local` instead of `v8::Handle`
      EBEAST: v8bse/V8Stub.py: use `v8::Local` instead of `v8::Handle`
      Squash 'external/v8pp' changes from cda26b60e..792dd225fa42
      EBEAST: vc/utilities.js: use a 170ms delay for focus activation
      EBEAST: package.json.in: upgrade electron to 3.1.12.
      EBEAST: vc/modaldialog.vue: add focus cycling
      EBEAST: vc/modaldialog.vue: reduce modal dialog wrappers
      EBEAST: vc/utilities.js: modal_shield: add 'focuscycle' option
      EBEAST: utilities.js: add list_focusables()
      EBEAST: vc/utilities.js: fix missing focus_guard increments
      EBEAST: temporarily add .active to elements activated via Enter
      EBEAST: vc/hotkeys.js: use key matching from utilities.js
      EBEAST: vc/utilities.js: add missing export of is_navigation_key_code
      EBEAST: vc/utilities.js: export match_key_event()
      EBEAST: vc/utilities.js: export key codes and is_navigation_key_code()
      EBEAST: vc/utilities.js: add in_array()
      EBEAST: vc/modaldialog.vue: fix tabindex for modal widget children
      EBEAST: vc/hotkeys.js: allow Enter for focus activation via keyboard_click
      EBEAST: vc/utilities.js: add keyboard_click()
      EBEAST: vc/part-list.vue: remove extra this to fix linter warning
      EBEAST: vc/bundle.js: sort component registration
      EBEAST: use fork-awesome-sprites-0.1.svg instead of Font Awesome 4.7.0 sprites
      EBEAST: remove icon-button.vue, we now use vc-icon
      EBEAST: vc/playcontrols.vue: use vc-icon
      EBEAST: vc/icon.vue: add component for SVG icon rendering
      EBEAST: package.json.in: remove font-awesome-4.7.0 npm package
      EBEAST: Makefile.mk: download fa-sprites-4.7.0.svg asset
      BSE: bsestorage: fix scanner_parse_paren_rest to capture float digits
      EBEAST: vc/part-list.vue: update docs and css includes
      EBEAST: track-list.vue: keep track ctrls out of horizontal scroll area
      EBEAST: part-list.vue: extract vc-part-list component


-- 
Yours sincerely,
Tim Janik

https://testbit.eu/timj
Free software author.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]