In the course of 32b7e04, I removed the channel lock from FxChannel because
I was under the impression that it was only needed to prevent crashes on
channel delete. However, at least two people experience crackling audio
after it was removed (#2708). Therefore, this commit reinstates it.
- Additional LMMS_BUILD flag.
- Disallow on plugins -Wl,-no-undefined which triggers undefined references.
- Make sure X11 headers are found.
Lib ossaudio is needed only for OpenBSD
redundant expression removal
simplify condition for detection OS 'kind'
seems the last commit brought an issue on OSx travis test ....
In Qt, it is not safe to delete a QObject inside a signal emitted by that
QObject. This happened with FxLine when removing an FX channel using the
context menu. This commit changes that by using deleteLater() instead of
delete on the FxLine. It also hides the FxLine to prevent a ghost of it
being drawn when deleting the last non-master FX channel.
Lock the mixer before performing a channel delete to prevent any race
conditions causing a crash. Also, update the audioport FX channel when
an InstrumentTrack's FX channel is changed to prevent the audioport
mixing to a nonexistent channel.
The fix works as follows: until now the method Knob::drawKnob has used
hard coded palette colors to draw the knob lines for the different knob
types. These palette colors are now assigned to the line color property
in Knob::initUi. The method Knob::drawKnob in turn now uses the line
color property for almost all knob types. This means that all knobs
lines will be painted in the same color as before unless that property
is overridden by the stylesheet.
Also removes an unnecessary typedef from QWidget to trackSettingsWidget
in Track.h.
This prevents a race condition with Qt5. A foreach loop makes a copy of its
Qt container, increasing the reference count to the container's internal
data. Qt5 often asserts isDetached(), which requires the reference count to
be <= 1. This assertion fails when the foreach loop increases the reference
count at exactly the wrong moment. Using a range-based for loop prevents an
unnecessary copy from being made and ensures this race condition isn't
triggered.