Changes
* Builsystem helpers are now installed to CMAKE_INSTALL_DATAROOTDIR
* CMake 2.8.9 is required to use GNUInstallDirs and for the Qt5 code
branches
* automoc4 support was removed. Building always use the cmake built-in
solution now.
* Qt5 and Qt4 builds use different CMake configurations now
* Qt4 is as it always has been
* Qt5 moved away from crudely ported Qt4 configurations to using
extra-cmake-modules' KDE compiler and cmake flags.
* Installation paths and so forth are still jointly configured as to
retain backwards compatibility (i.e. Qt5 build does not follow ECM's
KDEInstallationPaths)
Bug Fixes
* VolumeSlider has seen async behavior improvements making the slider
not hop around when changing the volume rapidly and the backend is
lagging a bit behind. The volume change now occurs upon slider release
rather than instantly.
* Fixed a duble encoding issue with local paths that contain percent
encoded characters being double-encoded
New API
* New AudioOutputInterface49 for backends to implement. This interface
implements long-existing frontend interfaces for muting, giving the
backend easier access and control.
* setMuted(bool) mutes an AudioOuput (without the 4.9 interface this
is done via setVolume(0.0) on the backend)
* mutedChanged(bool) signal emitted by the backend to asyncronuously
notify of the mute application
* The interface is only used if PulseSupport is not intercepting calls
* New methods to differntiate states of PulseSupport
* request(bool) is used by backends to request PulseAudio usage but no
interception, this essentially enables device listing but lets
everything else fall through to the backend (the existing isActive()
method will not return true after request(true), which makes it
different from enable(true))
* isRequested() is a getter for request()'s state
* isUsable() is part of the previouys isActive() behavior, it is true
iff pulseaudio can be used (daemon running, connected etc)
* isUsed() is a combination of isRequested() and isUsable() (i.e. active
but not intercepting)
* The existing isActive() communicates the same state as before (active
and intercepting) but now also takes requested into consideration
* Enabling always implies requsting automatically, so request(false)
and enable(true) will ultimately still restul in isRequested==true