From 31dc8e18ff90489804747de8ef5e111da9d74b29 Mon Sep 17 00:00:00 2001 From: Javier Serrano Polo Date: Mon, 25 Feb 2019 03:53:05 +0100 Subject: [PATCH 01/25] Test deployment preparation in regular builds (#4847) Tests whether contributions break packaging inadvertently --- .travis.yml | 2 -- .travis/linux..script.sh | 5 ++++- .travis/linux.win32.script.sh | 2 ++ .travis/linux.win64.script.sh | 2 ++ .travis/osx..script.sh | 5 ++++- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index c48186fa3..fb0325a0d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,8 +35,6 @@ script: - . ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.script.sh after_script: - ccache -s -before_deploy: - - if [ "$TARGET_OS" != debian-sid ]; then make package; fi deploy: provider: releases api_key: diff --git a/.travis/linux..script.sh b/.travis/linux..script.sh index a68620483..8f3b763d3 100644 --- a/.travis/linux..script.sh +++ b/.travis/linux..script.sh @@ -7,8 +7,11 @@ if [ $QT5 ]; then source /opt/qt59/bin/qt59-env.sh fi -cmake -DUSE_WERROR=ON $CMAKE_FLAGS .. +cmake -DCMAKE_INSTALL_PREFIX=../target/ -DUSE_WERROR=ON $CMAKE_FLAGS .. make -j4 make tests ./tests/tests + +make install +make appimage diff --git a/.travis/linux.win32.script.sh b/.travis/linux.win32.script.sh index eb7cb9f7a..1ef063d55 100644 --- a/.travis/linux.win32.script.sh +++ b/.travis/linux.win32.script.sh @@ -6,3 +6,5 @@ export CMAKE_OPTS="$CMAKE_FLAGS -DUSE_WERROR=ON" ../cmake/build_mingw32.sh make -j4 + +make package diff --git a/.travis/linux.win64.script.sh b/.travis/linux.win64.script.sh index fb62cb5b3..b99a461de 100644 --- a/.travis/linux.win64.script.sh +++ b/.travis/linux.win64.script.sh @@ -6,3 +6,5 @@ export CMAKE_OPTS="$CMAKE_FLAGS -DUSE_WERROR=ON" ../cmake/build_mingw64.sh make -j4 + +make package diff --git a/.travis/osx..script.sh b/.travis/osx..script.sh index fb1473f79..58df3b624 100644 --- a/.travis/osx..script.sh +++ b/.travis/osx..script.sh @@ -7,8 +7,11 @@ if [ $QT5 ]; then export CMAKE_PREFIX_PATH="$(brew --prefix qt5)" fi -cmake $CMAKE_FLAGS -DUSE_WERROR=OFF .. +cmake -DCMAKE_INSTALL_PREFIX=../target/ $CMAKE_FLAGS -DUSE_WERROR=OFF .. make -j4 make tests ./tests/tests + +make install +make dmg From e34f75a8c7605cbc9f31fbb43c91255679ede6fb Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Sun, 24 Feb 2019 21:57:53 -0500 Subject: [PATCH 02/25] Add needed macOS shortcuts (#4851) Fix insert bars, delete bars, delete notes on Apple keyboard --- src/gui/editors/AutomationEditor.cpp | 1 + src/gui/editors/PianoRoll.cpp | 1 + src/gui/editors/SongEditor.cpp | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/editors/AutomationEditor.cpp b/src/gui/editors/AutomationEditor.cpp index 0234be0ab..06eece23a 100644 --- a/src/gui/editors/AutomationEditor.cpp +++ b/src/gui/editors/AutomationEditor.cpp @@ -404,6 +404,7 @@ void AutomationEditor::keyPressEvent(QKeyEvent * ke ) } break; + case Qt::Key_Backspace: case Qt::Key_Delete: deleteSelectedValues(); ke->accept(); diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index 7bdf9dc07..fef788885 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -1184,6 +1184,7 @@ void PianoRoll::keyPressEvent(QKeyEvent* ke ) clearSelectedNotes(); break; + case Qt::Key_Backspace: case Qt::Key_Delete: deleteSelectedNotes(); ke->accept(); diff --git a/src/gui/editors/SongEditor.cpp b/src/gui/editors/SongEditor.cpp index f3b69e47d..286b01f15 100644 --- a/src/gui/editors/SongEditor.cpp +++ b/src/gui/editors/SongEditor.cpp @@ -315,13 +315,13 @@ void SongEditor::keyPressEvent( QKeyEvent * ke ) { if( /*_ke->modifiers() & Qt::ShiftModifier*/ gui->mainWindow()->isShiftPressed() == true && - ke->key() == Qt::Key_Insert ) + ( ke->key() == Qt::Key_Insert || ke->key() == Qt::Key_Enter || ke->key() == Qt::Key_Return ) ) { m_song->insertBar(); } else if(/* _ke->modifiers() & Qt::ShiftModifier &&*/ gui->mainWindow()->isShiftPressed() == true && - ke->key() == Qt::Key_Delete ) + ( ke->key() == Qt::Key_Delete || ke->key() == Qt::Key_Backspace ) ) { m_song->removeBar(); } From ad1fa16a9525776a19d8a760c484d0837c20d621 Mon Sep 17 00:00:00 2001 From: Javier Serrano Polo Date: Mon, 25 Feb 2019 19:06:01 +0100 Subject: [PATCH 03/25] Move apt_mingw_cache out of build directory (#4842) --- .travis.yml | 2 +- .travis/linux.win.download.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index fb0325a0d..6067c3cad 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,7 +4,7 @@ dist: trusty sudo: required cache: directories: - - apt_mingw_cache + - $HOME/apt_mingw_cache - $HOME/.ccache - $HOME/pbuilder-bases matrix: diff --git a/.travis/linux.win.download.sh b/.travis/linux.win.download.sh index 76d7928b4..aad5f1c69 100644 --- a/.travis/linux.win.download.sh +++ b/.travis/linux.win.download.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -e -CACHE_DIR=$TRAVIS_BUILD_DIR/apt_mingw_cache/$1 +CACHE_DIR=$HOME/apt_mingw_cache/$1 mkdir -p $CACHE_DIR pushd $CACHE_DIR From a233291c271a1fbb1da448bbc9efb8f53f3f6fbe Mon Sep 17 00:00:00 2001 From: Lukas W Date: Wed, 27 Feb 2019 09:50:48 +0100 Subject: [PATCH 04/25] Add missing include Compilation fails with debug build. Fixes regression from dd99f3a7c466e86e02a8a8811e4b41f471a8b15d --- src/core/MixHelpers.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/core/MixHelpers.cpp b/src/core/MixHelpers.cpp index d70b47e07..0957852c6 100644 --- a/src/core/MixHelpers.cpp +++ b/src/core/MixHelpers.cpp @@ -23,6 +23,9 @@ */ #include "MixHelpers.h" + +#include + #include "lmms_math.h" #include "ValueBuffer.h" From 05d5e2036de38b082560d47c04d6bd282a76bd43 Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Sun, 3 Mar 2019 05:44:20 -0300 Subject: [PATCH 05/25] Fix DrumSynth sscanf (#4869) --- src/core/DrumSynth.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core/DrumSynth.cpp b/src/core/DrumSynth.cpp index e1fb77793..b39e8f52e 100644 --- a/src/core/DrumSynth.cpp +++ b/src/core/DrumSynth.cpp @@ -119,7 +119,10 @@ void DrumSynth::GetEnv(int env, const char *sec, const char *key, QString ini) char en[256], s[8]; int i=0, o=0, ep=0; GetPrivateProfileString(sec, key, "0,0 100,0", en, sizeof(en), ini); - en[255]=0; //be safe! + + //be safe! + en[255]=0; + s[0]=0; while(en[i]!=0) { From e54969c568d4e2f270ccb340959129ab653973a4 Mon Sep 17 00:00:00 2001 From: tresf Date: Tue, 5 Mar 2019 15:55:41 -0500 Subject: [PATCH 06/25] Add /sbin to AppImage search path Closes #4846 --- cmake/linux/package_linux.sh.in | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/linux/package_linux.sh.in b/cmake/linux/package_linux.sh.in index ee0389749..b02a4c688 100644 --- a/cmake/linux/package_linux.sh.in +++ b/cmake/linux/package_linux.sh.in @@ -97,6 +97,7 @@ mv "${APPDIR}usr/bin/lmms" "${APPDIR}usr/bin/lmms.real" cat >"${APPDIR}usr/bin/lmms" < /dev/null 2>&1; then CARLAPATH="\$(which carla)" CARLAPREFIX="\${CARLAPATH%/bin*}" From 009a451d0bbc3c944e08147d825f9941ae7b8ba7 Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Tue, 5 Mar 2019 18:36:01 -0300 Subject: [PATCH 07/25] Fix AudioFileProcessor tooltip (#4868) --- plugins/audio_file_processor/audio_file_processor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/audio_file_processor/audio_file_processor.cpp b/plugins/audio_file_processor/audio_file_processor.cpp index 2fdb8e459..313554899 100644 --- a/plugins/audio_file_processor/audio_file_processor.cpp +++ b/plugins/audio_file_processor/audio_file_processor.cpp @@ -522,7 +522,7 @@ AudioFileProcessorView::AudioFileProcessorView( Instrument * _instrument, "loop_pingpong_on" ) ); m_loopPingPongButton->setInactiveGraphic( PLUGIN_NAME::getIconPixmap( "loop_pingpong_off" ) ); - ToolTip::add( m_loopPingPongButton, tr( "Enable loop" ) ); + ToolTip::add( m_loopPingPongButton, tr( "Enable ping-pong loop" ) ); m_loopPingPongButton->setWhatsThis( tr( "This button enables ping-pong-looping. " "The sample loops backwards and forwards between the end point " From 991ffcd2e0261e306e996ad5eb661388ef39c1e4 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Tue, 5 Mar 2019 16:42:36 -0500 Subject: [PATCH 08/25] Disable soundio on macOS Temporarily disable soundio on macOS to address stability issues with PortAudio Closes #4864 --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index e204a644a..2611d7086 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -73,6 +73,7 @@ OPTION(WANT_QT5 "Build with Qt5" OFF) IF(LMMS_BUILD_APPLE) # Fix linking on 10.14+. See issue #4762 on github LINK_DIRECTORIES(/usr/local/lib) + SET(WANT_SOUNDIO OFF) SET(WANT_ALSA OFF) SET(WANT_PULSEAUDIO OFF) SET(WANT_VST OFF) From 9e6ce0638d7e9d1ffb51ae32a0730c4c7e4e2379 Mon Sep 17 00:00:00 2001 From: tresf Date: Wed, 6 Mar 2019 23:39:53 -0500 Subject: [PATCH 09/25] Blacklist $HOME as VST directory Closes #4854 --- src/core/ConfigManager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/ConfigManager.cpp b/src/core/ConfigManager.cpp index f52e10ac7..2ed0f8308 100644 --- a/src/core/ConfigManager.cpp +++ b/src/core/ConfigManager.cpp @@ -524,8 +524,9 @@ void ConfigManager::loadConfigFile( const QString & configFile ) cfg_file.close(); } - + // Plugins are searched recursively, blacklist problematic locations if( m_vstDir.isEmpty() || m_vstDir == QDir::separator() || m_vstDir == "/" || + m_vstDir == ensureTrailingSlash( QDir::homePath() ) || !QDir( m_vstDir ).exists() ) { #ifdef LMMS_BUILD_WIN32 From cdd1ddbb0cf3e2b09d7dc1daf0f4b2fa456456c1 Mon Sep 17 00:00:00 2001 From: Javier Serrano Polo Date: Thu, 7 Mar 2019 06:32:23 +0100 Subject: [PATCH 10/25] Sync Debian version (#4840) * Sync Debian version * Drop temporary logging --- .travis.yml | 2 ++ .travis/linux.debian-sid.script.sh | 34 ++++++++++++++++++++++++++++++ debian/changelog | 2 +- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6067c3cad..b543a956d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,6 +21,8 @@ matrix: osx_image: xcode8.2 env: QT5=True - env: TARGET_OS=debian-sid TARGET_DEPLOY=True + git: + depth: false - env: TARGET_OS=debian-sid TARGET_ARCH=i386 - compiler: clang env: TARGET_OS=debian-sid diff --git a/.travis/linux.debian-sid.script.sh b/.travis/linux.debian-sid.script.sh index 7318ae5ac..47143b5fe 100755 --- a/.travis/linux.debian-sid.script.sh +++ b/.travis/linux.debian-sid.script.sh @@ -31,6 +31,40 @@ else sudo pbuilder --update --basetgz "$BASETGZ" fi +sync_version() { + local VERSION + local MMR + local STAGE + local EXTRA + + VERSION=$(git describe --tags --match v[0-9].[0-9].[0-9]*) + VERSION=${VERSION#v} + MMR=${VERSION%%-*} + case $VERSION in + *-*-*-*) + VERSION=${VERSION%-*} + STAGE=${VERSION#*-} + STAGE=${STAGE%-*} + EXTRA=${VERSION##*-} + VERSION=$MMR~$STAGE.$EXTRA + ;; + *-*-*) + VERSION=${VERSION%-*} + EXTRA=${VERSION##*-} + VERSION=$MMR.$EXTRA + ;; + *-*) + STAGE=${VERSION#*-} + VERSION=$MMR~$STAGE + ;; + esac + + sed "1 s/@VERSION@/$VERSION/" -i debian/changelog + echo Set Debian version to $VERSION +} + +sync_version + DIR="$PWD" cd .. dpkg-source -b "$DIR" diff --git a/debian/changelog b/debian/changelog index c44b1790c..86f03c427 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -lmms (1.2.0~rc7.1) unstable; urgency=low +lmms (@VERSION@) unstable; urgency=low * Upstream integration. * Drop Debian menu entry (policy 9.6). From 17e87c1d689e1548d0c98a8a2fce5b229c799dbd Mon Sep 17 00:00:00 2001 From: Lukas W Date: Sun, 10 Mar 2019 10:27:51 +0100 Subject: [PATCH 11/25] Fix MidiJack crash on exit * Fix uninitialized m_jackClient being used in MidiJack destructor * Fix destruction order in Mixer.cpp so that MidiJack doesn't access the deleted AudioJack instance Fixes #4688 --- src/core/Mixer.cpp | 2 +- src/core/midi/MidiJack.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/Mixer.cpp b/src/core/Mixer.cpp index fae7b35db..c87305641 100644 --- a/src/core/Mixer.cpp +++ b/src/core/Mixer.cpp @@ -186,8 +186,8 @@ Mixer::~Mixer() } delete m_fifo; - delete m_audioDev; delete m_midiClient; + delete m_audioDev; for( int i = 0; i < 3; i++ ) { diff --git a/src/core/midi/MidiJack.cpp b/src/core/midi/MidiJack.cpp index cea7f7381..568b6dae1 100644 --- a/src/core/midi/MidiJack.cpp +++ b/src/core/midi/MidiJack.cpp @@ -61,6 +61,7 @@ static void JackMidiShutdown(void *arg) MidiJack::MidiJack() : MidiClientRaw(), + m_jackClient( nullptr ), m_input_port( NULL ), m_output_port( NULL ), m_quit( false ) From 2a728080957053b54446d0cebca2417e27c27d14 Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Sun, 3 Mar 2019 11:35:30 +0100 Subject: [PATCH 12/25] Fix #3926: QCursor in AFP Fix a crash that occurred on the following steps: 1. Add an AFP track. 2. Open it, and move the waveform display to overlap the track label button. 3. Close the AFP window and open it again by clicking the track label. 4. Move the mouse pointer. The problem occurs because the code makes the implicit assumption that AudioFileProcessorWaveView::enterEvent (and hence QApplication::setOverrideCursor) is called before AudioFileProcessorWaveView::mouseMoveEvent. This is not the case when the waveform display is on top of the track label. In this case the AFP windows is opened with the mouse being immediately positioned over the wave form display. There is no enter event and move events are issues directly. This then leads to a crash in AudioFileProcessorWaveView::mouseMoveEvent when trying to determine the value for is_size_cursor because the override cursor is still null but is dereferenced directly without checking. Only adding a check would not solve the problem because in that case the cursor would not change to the hand cursor when being moved inside the waveform display. The solution is to remove all calls to the global methods setOverrideCursor and restoreOverrideCursor and to only set the cursor locally. This fix is based on a patch by gi0e5b06 which is committed under 8a10c52 in his repository but for which he never created a pull request. --- .../audio_file_processor.cpp | 47 ++++++++++--------- .../audio_file_processor.h | 2 +- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/plugins/audio_file_processor/audio_file_processor.cpp b/plugins/audio_file_processor/audio_file_processor.cpp index 313554899..6be59f3cd 100644 --- a/plugins/audio_file_processor/audio_file_processor.cpp +++ b/plugins/audio_file_processor/audio_file_processor.cpp @@ -795,6 +795,7 @@ AudioFileProcessorWaveView::AudioFileProcessorWaveView( QWidget * _parent, int _ m_graph.fill( Qt::transparent ); update(); + updateCursor(); } @@ -811,7 +812,7 @@ void AudioFileProcessorWaveView::isPlaying( f_cnt_t _current_frame ) void AudioFileProcessorWaveView::enterEvent( QEvent * _e ) { - QApplication::setOverrideCursor( Qt::OpenHandCursor ); + updateCursor(); } @@ -819,10 +820,7 @@ void AudioFileProcessorWaveView::enterEvent( QEvent * _e ) void AudioFileProcessorWaveView::leaveEvent( QEvent * _e ) { - while( QApplication::overrideCursor() ) - { - QApplication::restoreOverrideCursor(); - } + updateCursor(); } @@ -850,7 +848,7 @@ void AudioFileProcessorWaveView::mousePressEvent( QMouseEvent * _me ) else { m_draggingType = wave; - QApplication::setOverrideCursor( Qt::ClosedHandCursor ); + updateCursor(_me); } } @@ -862,7 +860,7 @@ void AudioFileProcessorWaveView::mouseReleaseEvent( QMouseEvent * _me ) m_isDragging = false; if( m_draggingType == wave ) { - QApplication::restoreOverrideCursor(); + updateCursor(_me); } } @@ -873,22 +871,7 @@ void AudioFileProcessorWaveView::mouseMoveEvent( QMouseEvent * _me ) { if( ! m_isDragging ) { - const bool is_size_cursor = - QApplication::overrideCursor()->shape() == Qt::SizeHorCursor; - - if( isCloseTo( _me->x(), m_startFrameX ) || - isCloseTo( _me->x(), m_endFrameX ) || - isCloseTo( _me->x(), m_loopFrameX ) ) - { - if( ! is_size_cursor ) - { - QApplication::setOverrideCursor( Qt::SizeHorCursor ); - } - } - else if( is_size_cursor ) - { - QApplication::restoreOverrideCursor(); - } + updateCursor(_me); return; } @@ -1261,6 +1244,24 @@ void AudioFileProcessorWaveView::reverse() +void AudioFileProcessorWaveView::updateCursor( QMouseEvent * _me ) +{ + bool const waveIsDragged = m_isDragging && (m_draggingType == wave); + bool const pointerCloseToStartEndOrLoop = (_me != nullptr ) && + ( isCloseTo( _me->x(), m_startFrameX ) || + isCloseTo( _me->x(), m_endFrameX ) || + isCloseTo( _me->x(), m_loopFrameX ) ); + + if( !m_isDragging && pointerCloseToStartEndOrLoop) + setCursor(Qt::SizeHorCursor); + else if( waveIsDragged ) + setCursor(Qt::ClosedHandCursor); + else + setCursor(Qt::OpenHandCursor); +} + + + void AudioFileProcessorWaveView::knob::slideTo( double _v, bool _check_bound ) { diff --git a/plugins/audio_file_processor/audio_file_processor.h b/plugins/audio_file_processor/audio_file_processor.h index 150807686..d17be147c 100644 --- a/plugins/audio_file_processor/audio_file_processor.h +++ b/plugins/audio_file_processor/audio_file_processor.h @@ -211,7 +211,6 @@ public: private: bool checkBound( double _v ) const; - } ; @@ -276,6 +275,7 @@ private: void updateGraph(); void reverse(); + void updateCursor( QMouseEvent * _me = nullptr ); static bool isCloseTo( int _a, int _b ) { From 04768ee3e14a57d323112717bef10088411d9ae9 Mon Sep 17 00:00:00 2001 From: tresf Date: Mon, 11 Mar 2019 14:24:12 -0400 Subject: [PATCH 13/25] Fix zyn pitch on project load/export Closes #3451 --- plugins/zynaddsubfx/ZynAddSubFx.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/zynaddsubfx/ZynAddSubFx.cpp b/plugins/zynaddsubfx/ZynAddSubFx.cpp index fff13c62d..a75d573a8 100644 --- a/plugins/zynaddsubfx/ZynAddSubFx.cpp +++ b/plugins/zynaddsubfx/ZynAddSubFx.cpp @@ -291,6 +291,7 @@ void ZynAddSubFxInstrument::loadSettings( const QDomElement & _this ) emit settingsChanged(); } + emit instrumentTrack()->pitchModel()->dataChanged(); } From 97d5529c18bee51d638607a192ab91b131d41086 Mon Sep 17 00:00:00 2001 From: tresf Date: Tue, 12 Mar 2019 00:25:17 -0400 Subject: [PATCH 14/25] Fix compilation on Qt4 --- plugins/zynaddsubfx/ZynAddSubFx.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/zynaddsubfx/ZynAddSubFx.cpp b/plugins/zynaddsubfx/ZynAddSubFx.cpp index a75d573a8..e929f7c19 100644 --- a/plugins/zynaddsubfx/ZynAddSubFx.cpp +++ b/plugins/zynaddsubfx/ZynAddSubFx.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -291,7 +292,10 @@ void ZynAddSubFxInstrument::loadSettings( const QDomElement & _this ) emit settingsChanged(); } +// FIXME: Remove this check in future versions. Slots are public in Qt5+ +#if QT_VERSION >= 0x050000 emit instrumentTrack()->pitchModel()->dataChanged(); +#endif } From 295b899df287c3ea44d5d49e59a12eec4a069fee Mon Sep 17 00:00:00 2001 From: Javier Serrano Polo Date: Wed, 13 Mar 2019 23:27:54 +0100 Subject: [PATCH 15/25] Avoid shallow clones in all Debian sid builds (#4888) hallow clone may break version detection. This is fatal in Debian builds, so use full clone. Note: This is safe for stable-1.2 but needs review after merging to master due to submodules. See #4888 for more information. --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index b543a956d..5f8002cb1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,8 +24,12 @@ matrix: git: depth: false - env: TARGET_OS=debian-sid TARGET_ARCH=i386 + git: + depth: false - compiler: clang env: TARGET_OS=debian-sid + git: + depth: false before_install: - . ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.before_install.sh install: From 17f6235500ca3b820ba53891681ac8f443514a65 Mon Sep 17 00:00:00 2001 From: Dominic Clark Date: Sun, 3 Mar 2019 16:01:07 +0000 Subject: [PATCH 16/25] Add VST always-on-top config option --- include/SetupDialog.h | 5 ++++ plugins/vst_base/VstPlugin.cpp | 4 +++- src/gui/SetupDialog.cpp | 44 ++++++++++++++++++++++++++++------ 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/include/SetupDialog.h b/include/SetupDialog.h index 338ea93dd..d0607022d 100644 --- a/include/SetupDialog.h +++ b/include/SetupDialog.h @@ -126,6 +126,9 @@ private slots: void toggleDisplayWaveform( bool en ); void toggleDisableAutoquit( bool en ); + void vstEmbedMethodChanged(); + void toggleVSTAlwaysOnTop( bool en ); + void setLanguage( int lang ); @@ -207,6 +210,8 @@ private: QComboBox* m_vstEmbedComboBox; QString m_vstEmbedMethod; + LedCheckBox * m_vstAlwaysOnTopCheckBox; + bool m_vstAlwaysOnTop; } ; diff --git a/plugins/vst_base/VstPlugin.cpp b/plugins/vst_base/VstPlugin.cpp index a97802bdc..e0e1347fe 100644 --- a/plugins/vst_base/VstPlugin.cpp +++ b/plugins/vst_base/VstPlugin.cpp @@ -329,7 +329,9 @@ bool VstPlugin::processMessage( const message & _m ) case IdVstPluginWindowID: m_pluginWindowID = _m.getInt(); - if( m_embedMethod == "none" ) + if( m_embedMethod == "none" + && ConfigManager::inst()->value( + "ui", "vstalwaysontop" ).toInt() ) { #ifdef LMMS_BUILD_WIN32 // We're changing the owner, not the parent, diff --git a/src/gui/SetupDialog.cpp b/src/gui/SetupDialog.cpp index 4c261f581..746e7e651 100644 --- a/src/gui/SetupDialog.cpp +++ b/src/gui/SetupDialog.cpp @@ -138,7 +138,9 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : "displaywaveform").toInt() ), m_disableAutoQuit(ConfigManager::inst()->value( "ui", "disableautoquit", "1" ).toInt() ), - m_vstEmbedMethod( ConfigManager::inst()->vstEmbedMethod() ) + m_vstEmbedMethod( ConfigManager::inst()->vstEmbedMethod() ), + m_vstAlwaysOnTop( ConfigManager::inst()->value( "ui", + "vstalwaysontop" ).toInt() ) { setWindowIcon( embed::getIconPixmap( "setup_general" ) ); setWindowTitle( tr( "Setup LMMS" ) ); @@ -346,7 +348,7 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : } TabWidget* embed_tw = new TabWidget( tr( "PLUGIN EMBEDDING" ), general); - embed_tw->setFixedHeight( 48 ); + embed_tw->setFixedHeight( 66 ); m_vstEmbedComboBox = new QComboBox( embed_tw ); m_vstEmbedComboBox->move( XDelta, YDelta ); @@ -365,6 +367,17 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : m_vstEmbedComboBox->addItem( tr( "Embed using XEmbed protocol" ), "xembed" ); } m_vstEmbedComboBox->setCurrentIndex( m_vstEmbedComboBox->findData( m_vstEmbedMethod ) ); + connect( m_vstEmbedComboBox, SIGNAL( currentIndexChanged( int ) ), + this, SLOT( vstEmbedMethodChanged() ) ); + + m_vstAlwaysOnTopCheckBox = new LedCheckBox( + tr( "Keep plugin windows on top when not embedded" ), + embed_tw ); + m_vstAlwaysOnTopCheckBox->move( 20, 44 ); + m_vstAlwaysOnTopCheckBox->setChecked( m_vstAlwaysOnTop ); + m_vstAlwaysOnTopCheckBox->setVisible( m_vstEmbedMethod == "none" ); + connect( m_vstAlwaysOnTopCheckBox, SIGNAL( toggled( bool ) ), + this, SLOT( toggleVSTAlwaysOnTop( bool ) ) ); TabWidget * lang_tw = new TabWidget( tr( "LANGUAGE" ), general ); lang_tw->setFixedHeight( 48 ); @@ -1094,11 +1107,9 @@ void SetupDialog::accept() QString::number( m_disableAutoQuit ) ); ConfigManager::inst()->setValue( "app", "language", m_lang ); ConfigManager::inst()->setValue( "ui", "vstembedmethod", -#if QT_VERSION >= 0x050000 - m_vstEmbedComboBox->currentData().toString() ); -#else - m_vstEmbedComboBox->itemData(m_vstEmbedComboBox->currentIndex()).toString() ); -#endif + m_vstEmbedMethod ); + ConfigManager::inst()->setValue( "ui", "vstalwaysontop", + QString::number( m_vstAlwaysOnTop ) ); ConfigManager::inst()->setWorkingDir(QDir::fromNativeSeparators(m_workingDir)); @@ -1316,6 +1327,25 @@ void SetupDialog::toggleOneInstrumentTrackWindow( bool _enabled ) m_oneInstrumentTrackWindow = _enabled; } + +void SetupDialog::vstEmbedMethodChanged() +{ +#if QT_VERSION >= 0x050000 + m_vstEmbedMethod = m_vstEmbedComboBox->currentData().toString(); +#else + m_vstEmbedMethod = m_vstEmbedComboBox->itemData( + m_vstEmbedComboBox->currentIndex()).toString(); +#endif + m_vstAlwaysOnTopCheckBox->setVisible( m_vstEmbedMethod == "none" ); +} + + +void SetupDialog::toggleVSTAlwaysOnTop( bool en ) +{ + m_vstAlwaysOnTop = en; +} + + void SetupDialog::setLanguage( int lang ) { m_lang = m_languages[lang]; From 6fef905dfe9a556d0e51738d90fff707d678ed44 Mon Sep 17 00:00:00 2001 From: Dominic Clark Date: Sun, 3 Mar 2019 16:02:37 +0000 Subject: [PATCH 17/25] Ensure VST windows show properly in taskbar --- plugins/vst_base/RemoteVstPlugin.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/plugins/vst_base/RemoteVstPlugin.cpp b/plugins/vst_base/RemoteVstPlugin.cpp index fbffe4b34..8dd25c11f 100644 --- a/plugins/vst_base/RemoteVstPlugin.cpp +++ b/plugins/vst_base/RemoteVstPlugin.cpp @@ -775,10 +775,6 @@ void RemoteVstPlugin::initEditor() SWP_NOMOVE | SWP_NOZORDER ); pluginDispatch( effEditTop ); - if (! EMBED) { - showEditor(); - } - #ifdef LMMS_BUILD_LINUX m_windowID = (intptr_t) GetProp( m_window, "__wine_x11_whole_window" ); #else From 205b57531d8b3d11c6d666f302426057c41d3fb0 Mon Sep 17 00:00:00 2001 From: Dominic Clark Date: Sun, 3 Mar 2019 16:06:04 +0000 Subject: [PATCH 18/25] Don't show error when loading empty VeSTige instance --- plugins/vestige/vestige.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/vestige/vestige.cpp b/plugins/vestige/vestige.cpp index 0cfa31d21..fc07e46d5 100644 --- a/plugins/vestige/vestige.cpp +++ b/plugins/vestige/vestige.cpp @@ -181,7 +181,13 @@ vestigeInstrument::~vestigeInstrument() void vestigeInstrument::loadSettings( const QDomElement & _this ) { - loadFile( _this.attribute( "plugin" ) ); + QString plugin = _this.attribute( "plugin" ); + if( plugin.isEmpty() ) + { + return; + } + + loadFile( plugin ); m_pluginMutex.lock(); if( m_plugin != NULL ) { From 3aeacca7acf7fe77a3f0545451dbe4e3332c1628 Mon Sep 17 00:00:00 2001 From: Dominic Clark Date: Sun, 3 Mar 2019 16:11:02 +0000 Subject: [PATCH 19/25] Fix layout of VstSyncData struct Ensure member of type double is 8-byte aligned for consistent layout between 32- and 64-bit Linux builds. --- include/VstSyncController.h | 2 +- include/VstSyncData.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/VstSyncController.h b/include/VstSyncController.h index 682291b9e..970a48ad3 100644 --- a/include/VstSyncController.h +++ b/include/VstSyncController.h @@ -76,10 +76,10 @@ private slots: private: struct VstSyncData { - bool isPlaying; double ppqPos; int timeSigNumer; int timeSigDenom; + bool isPlaying; bool isCycle; bool hasSHM; float cycleStart; diff --git a/include/VstSyncData.h b/include/VstSyncData.h index f9696252a..6c2f1bbd2 100644 --- a/include/VstSyncData.h +++ b/include/VstSyncData.h @@ -41,10 +41,10 @@ struct VstSyncData { - bool isPlaying; double ppqPos; int timeSigNumer; int timeSigDenom; + bool isPlaying; bool isCycle; bool hasSHM; float cycleStart; From 0c3db1045cda28f613f4aecf6a946b6c8f19eb5b Mon Sep 17 00:00:00 2001 From: Martin Pavelek Date: Sun, 17 Mar 2019 15:00:47 +0100 Subject: [PATCH 20/25] Fix Blackman-Harris window formula (#4895) Adds missing parentheses --- plugins/Eq/EqSpectrumView.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/Eq/EqSpectrumView.cpp b/plugins/Eq/EqSpectrumView.cpp index 677c896fb..456ca4871 100644 --- a/plugins/Eq/EqSpectrumView.cpp +++ b/plugins/Eq/EqSpectrumView.cpp @@ -45,11 +45,11 @@ EqAnalyser::EqAnalyser() : const float a2 = 0.14128; const float a3 = 0.01168; - for(int i = 0; i < FFT_BUFFER_SIZE; i++) + for (int i = 0; i < FFT_BUFFER_SIZE; i++) { - m_fftWindow[i] = ( a0 - a1 * cosf( 2 * F_PI * i / (float)FFT_BUFFER_SIZE - 1 ) - + a2 * cosf( 4 * F_PI * i / (float)FFT_BUFFER_SIZE-1) - - a3 * cos( 6 * F_PI * i / (float)FFT_BUFFER_SIZE - 1.0 )); + m_fftWindow[i] = (a0 - a1 * cos(2 * F_PI * i / ((float)FFT_BUFFER_SIZE - 1.0)) + + a2 * cos(4 * F_PI * i / ((float)FFT_BUFFER_SIZE - 1.0)) + - a3 * cos(6 * F_PI * i / ((float)FFT_BUFFER_SIZE - 1.0))); } clear(); } From dd6c18e62b9963baeefbe4fb07b2e6bd67dc2174 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Sat, 9 Mar 2019 18:57:12 +0100 Subject: [PATCH 21/25] Automation Editor: Don't accept drag events when there's no pattern Fixes #4857 --- src/gui/editors/AutomationEditor.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/editors/AutomationEditor.cpp b/src/gui/editors/AutomationEditor.cpp index 06eece23a..fafb83d0d 100644 --- a/src/gui/editors/AutomationEditor.cpp +++ b/src/gui/editors/AutomationEditor.cpp @@ -2565,6 +2565,9 @@ void AutomationEditorWindow::dropEvent( QDropEvent *_de ) void AutomationEditorWindow::dragEnterEvent( QDragEnterEvent *_dee ) { + if (! m_editor->validPattern() ) { + return; + } StringPairDrag::processDragEnterEvent( _dee, "automatable_model" ); } From e1adfc3952389f0e6c18c3bf7daef40c4ca72481 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Fri, 1 Mar 2019 09:00:46 +0100 Subject: [PATCH 22/25] TCO drag: Fix Ctrl+Drag crash Fix some assumptions that source and target of a drag actions are the same track container. Instead of looking up necessary information (track name, type and container id) by track index, add it to the metadata. Refactor canPasteSelection to take QDropEvent instead of the drop event's QMimeData. Coincidentally, this fixes the method to be consistent with its documentation. Fixes #4844 --- include/Track.h | 2 +- src/core/Track.cpp | 27 ++++++++++++++++++--------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/include/Track.h b/include/Track.h index 00ee5d0a6..f548168b7 100644 --- a/include/Track.h +++ b/include/Track.h @@ -341,7 +341,7 @@ public: } } - bool canPasteSelection( MidiTime tcoPos, const QMimeData * mimeData ); + bool canPasteSelection( MidiTime tcoPos, const QDropEvent *de ); bool pasteSelection( MidiTime tcoPos, QDropEvent * de ); MidiTime endPosition( const MidiTime & posStart ); diff --git a/src/core/Track.cpp b/src/core/Track.cpp index b300d94a3..cd1d23b16 100644 --- a/src/core/Track.cpp +++ b/src/core/Track.cpp @@ -497,7 +497,7 @@ void TrackContentObjectView::dragEnterEvent( QDragEnterEvent * dee ) { TrackContentWidget * tcw = getTrackView()->getTrackContentWidget(); MidiTime tcoPos = MidiTime( m_tco->startPosition().getTact(), 0 ); - if( tcw->canPasteSelection( tcoPos, dee->mimeData() ) == false ) + if( tcw->canPasteSelection( tcoPos, dee ) == false ) { dee->ignore(); } @@ -602,9 +602,12 @@ DataFile TrackContentObjectView::createTCODataFiles( it != tcoViews.end(); ++it ) { // Insert into the dom under the "tcos" element - int trackIndex = tc->tracks().indexOf( ( *it )->m_trackView->getTrack() ); + Track* tcoTrack = ( *it )->m_trackView->getTrack(); + int trackIndex = tc->tracks().indexOf( tcoTrack ); QDomElement tcoElement = dataFile.createElement( "tco" ); tcoElement.setAttribute( "trackIndex", trackIndex ); + tcoElement.setAttribute( "trackType", tcoTrack->type() ); + tcoElement.setAttribute( "trackName", tcoTrack->name() ); ( *it )->m_tco->saveState( dataFile, tcoElement ); tcoParent.appendChild( tcoElement ); } @@ -621,6 +624,7 @@ DataFile TrackContentObjectView::createTCODataFiles( QDomElement metadata = dataFile.createElement( "copyMetadata" ); // initialTrackIndex is the index of the track that was touched metadata.setAttribute( "initialTrackIndex", initialTrackIndex ); + metadata.setAttribute( "trackContainerId", tc->id() ); // grabbedTCOPos is the pos of the tact containing the TCO we grabbed metadata.setAttribute( "grabbedTCOPos", m_tco->startPosition() ); @@ -1316,7 +1320,7 @@ MidiTime TrackContentWidget::getPosition( int mouseX ) void TrackContentWidget::dragEnterEvent( QDragEnterEvent * dee ) { MidiTime tcoPos = MidiTime( getPosition( dee->pos().x() ).getTact(), 0 ); - if( canPasteSelection( tcoPos, dee->mimeData() ) == false ) + if( canPasteSelection( tcoPos, dee ) == false ) { dee->ignore(); } @@ -1335,8 +1339,10 @@ void TrackContentWidget::dragEnterEvent( QDragEnterEvent * dee ) * \param tcoPos the position of the TCO slot being pasted on * \param de the DropEvent generated */ -bool TrackContentWidget::canPasteSelection( MidiTime tcoPos, const QMimeData * mimeData ) +bool TrackContentWidget::canPasteSelection( MidiTime tcoPos, const QDropEvent* de ) { + const QMimeData * mimeData = de->mimeData(); + Track * t = getTrack(); QString type = StringPairDrag::decodeMimeKey( mimeData ); QString value = StringPairDrag::decodeMimeValue( mimeData ); @@ -1366,7 +1372,9 @@ bool TrackContentWidget::canPasteSelection( MidiTime tcoPos, const QMimeData * m const int currentTrackIndex = tracks.indexOf( t ); // Don't paste if we're on the same tact - if( tcoPos == grabbedTCOTact && currentTrackIndex == initialTrackIndex ) + auto sourceTrackContainerId = metadata.attributeNode( "trackContainerId" ).value().toUInt(); + if( de->source() && sourceTrackContainerId == t->trackContainer()->id() && + tcoPos == grabbedTCOTact && currentTrackIndex == initialTrackIndex ) { return false; } @@ -1389,9 +1397,9 @@ bool TrackContentWidget::canPasteSelection( MidiTime tcoPos, const QMimeData * m } // Track must be of the same type - Track * startTrack = tracks.at( trackIndex ); + auto startTrackType = tcoElement.attributeNode("trackType").value().toInt(); Track * endTrack = tracks.at( finalTrackIndex ); - if( startTrack->type() != endTrack->type() ) + if( startTrackType != endTrack->type() ) { return false; } @@ -1407,7 +1415,7 @@ bool TrackContentWidget::canPasteSelection( MidiTime tcoPos, const QMimeData * m */ bool TrackContentWidget::pasteSelection( MidiTime tcoPos, QDropEvent * de ) { - if( canPasteSelection( tcoPos, de->mimeData() ) == false ) + if( canPasteSelection( tcoPos, de ) == false ) { return false; } @@ -1478,7 +1486,8 @@ bool TrackContentWidget::pasteSelection( MidiTime tcoPos, QDropEvent * de ) tco->selectViewOnCreate( true ); } //check tco name, if the same as source track name dont copy - if( tco->name() == tracks[trackIndex]->name() ) + QString sourceTrackName = outerTCOElement.attributeNode( "trackName" ).value(); + if( tco->name() == sourceTrackName ) { tco->setName( "" ); } From ea5cbe6789911ac00292460f66e82628ed614f81 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Mon, 18 Mar 2019 12:41:01 -0400 Subject: [PATCH 23/25] Allow new Zyn bank creation on Linux (#4905) Allow new Zyn bank creation on Linux Closes #4642 --- .../zynaddsubfx/zynaddsubfx/src/Misc/Bank.cpp | 35 +++++++++++++++++-- .../zynaddsubfx/zynaddsubfx/src/Misc/Bank.h | 7 ++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.cpp b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.cpp index 5cb43e4ff..28b69f845 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.cpp +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.cpp @@ -188,6 +188,7 @@ void Bank::loadfromslot(unsigned int ninstrument, Part *part) */ int Bank::loadbank(string bankdirname) { + normalizedirsuffix(bankdirname); DIR *dir = opendir(bankdirname.c_str()); clearbank(); @@ -255,9 +256,15 @@ int Bank::newbank(string newbankdirname) string bankdir; bankdir = config.cfg.bankRootDirList[0]; - if(((bankdir[bankdir.size() - 1]) != '/') - && ((bankdir[bankdir.size() - 1]) != '\\')) - bankdir += "/"; + expanddirname(bankdir); + normalizedirsuffix(bankdir); + +// FIXME: Zyn should automatically handle creation of parent directory +#ifdef WIN32 + if(mkdir(bankdir.c_str()) < 0) return -1; +#else + if(mkdir(bankdir.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH)) return -1; +#endif bankdir += newbankdirname; #ifdef WIN32 @@ -355,6 +362,8 @@ void Bank::rescanforbanks() void Bank::scanrootdir(string rootdir) { + expanddirname(rootdir); + DIR *dir = opendir(rootdir.c_str()); if(dir == NULL) return; @@ -472,3 +481,23 @@ Bank::ins_t::ins_t() { info.PADsynth_used = false; } + +void Bank::expanddirname(std::string &dirname) { + if (dirname.empty()) + return; + + // if the directory name starts with a ~ and the $HOME variable is + // defined in the environment, replace ~ by the content of $HOME + if (dirname.at(0) == '~') { + char *home_dirname = getenv("HOME"); + if (home_dirname != NULL) { + dirname = std::string(home_dirname) + dirname.substr(1); + } + } +} + +void Bank::normalizedirsuffix(string &dirname) const { + if(((dirname[dirname.size() - 1]) != '/') + && ((dirname[dirname.size() - 1]) != '\\')) + dirname += "/"; +} diff --git a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.h b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.h index e9f56e2fb..a0ae74ce1 100644 --- a/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.h +++ b/plugins/zynaddsubfx/zynaddsubfx/src/Misc/Bank.h @@ -99,6 +99,13 @@ class Bank std::string dirname; void scanrootdir(std::string rootdir); //scans a root dir for banks + + /** Expends ~ prefix in dirname, if any */ + void expanddirname(std::string &dirname); + + /** Ensure that the directory name is suffixed by a + * directory separator */ + void normalizedirsuffix(std::string &dirname) const; }; #endif From f79c2929a5b9baa81279d016341a01bf160eaa3c Mon Sep 17 00:00:00 2001 From: necrashter Date: Tue, 19 Mar 2019 12:06:02 +0300 Subject: [PATCH 24/25] Fix empty editors after closing them and creating a new project (#4891) --- include/Editor.h | 1 + src/gui/editors/Editor.cpp | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/include/Editor.h b/include/Editor.h index 4b9017e9e..c93864439 100644 --- a/include/Editor.h +++ b/include/Editor.h @@ -47,6 +47,7 @@ protected: DropToolBar * addDropToolBar(Qt::ToolBarArea whereToAdd, QString const & windowTitle); DropToolBar * addDropToolBar(QWidget * parent, Qt::ToolBarArea whereToAdd, QString const & windowTitle); + virtual void closeEvent( QCloseEvent * _ce ); protected slots: virtual void play() {} virtual void record() {} diff --git a/src/gui/editors/Editor.cpp b/src/gui/editors/Editor.cpp index bdc3e55d4..9aa81fabb 100644 --- a/src/gui/editors/Editor.cpp +++ b/src/gui/editors/Editor.cpp @@ -32,6 +32,7 @@ #include #include #include +#include void Editor::setPauseIcon(bool displayPauseIcon) @@ -121,8 +122,18 @@ QAction *Editor::playAction() const return m_playAction; } - - +void Editor::closeEvent( QCloseEvent * _ce ) +{ + if( parentWidget() ) + { + parentWidget()->hide(); + } + else + { + hide(); + } + _ce->ignore(); + } DropToolBar::DropToolBar(QWidget* parent) : QToolBar(parent) { @@ -138,3 +149,6 @@ void DropToolBar::dropEvent(QDropEvent* event) { dropped(event); } + + + From 032c324dbc592173f94d24f835f8a7fdc8f73879 Mon Sep 17 00:00:00 2001 From: Hyunjin Song Date: Mon, 25 Mar 2019 15:30:45 +0900 Subject: [PATCH 25/25] Travis: use carla instead of carla-git Due to some breaking changes in the development branch of Carla, we can't use the package right now. Fortunately, the carla package now points to 2.0 series. So we will use it. See also: https://kx.studio/News/?action=view&url=changes-in-kxstudio-repos-regarding-carla-and-jack2 --- .travis/linux..install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis/linux..install.sh b/.travis/linux..install.sh index a4e0ea1cf..3e86eecfe 100644 --- a/.travis/linux..install.sh +++ b/.travis/linux..install.sh @@ -22,4 +22,4 @@ sudo apt-get install -y $PACKAGES sudo add-apt-repository -y ppa:kxstudio-debian/libs sudo add-apt-repository -y ppa:kxstudio-debian/apps sudo apt-get update -sudo apt-get install -y carla-git +sudo apt-get install -y carla