diff --git a/CHANGELOG.md b/CHANGELOG.md index 9054e280084..44ccabc5644 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -197,6 +197,20 @@ * ci(dependabot): Open PRs against 2.5 branch instead of main [#14060](https://github.com/mixxxdj/mixxx/pull/14060) * Happy New Year 2025! [#14098](https://github.com/mixxxdj/mixxx/pull/14098) +## [2.5.1](https://github.com/mixxxdj/mixxx/milestone/45) (unreleased) + +### Controller Mappings + +* Numark NS6II: Add new controller mapping [#11075](https://github.com/mixxxdj/mixxx/pull/11075) +* Hercules Inpulse 300: Updated mapping [#14051](https://github.com/mixxxdj/mixxx/pull/14051) + +### Fixes + +* Deere (64 samplers): Bring back library in regular view + [#14101](https://github.com/mixxxdj/mixxx/pull/14101) + [#14097](https://github.com/mixxxdj/mixxx/issues/14097) +* Enable R3 time-stretching with Rubberband 4.0.0 API version numbers [#14100](https://github.com/mixxxdj/mixxx/pull/14100) + ## [2.5.0](https://github.com/mixxxdj/mixxx/issues?q=milestone%3A2.5.0) (2024-12-24) ### Modernized Platform: Update to Qt6 diff --git a/CMakeLists.txt b/CMakeLists.txt index 89b5fbaf84f..7283ed6a7da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,16 +103,16 @@ endif() if(DEFINED MIXXX_VCPKG_ROOT) if( - EXISTS "$ENV{MIXXX_VCPKG_ROOT}/overlay/ports" - OR NOT EXISTS "$ENV{MIXXX_VCPKG_ROOT}/ports" + EXISTS "${MIXXX_VCPKG_ROOT}/overlay/ports" + OR NOT EXISTS "${MIXXX_VCPKG_ROOT}/ports" ) # MIXXX_VCPKG_ROOT points to our vcpkg environment # and we configure the CMAKE_TOOLCHAIN_FILE and overlays accordingly - message(STATUS "Using MIXXX_VCPKG_ROOT: $ENV{MIXXX_VCPKG_ROOT}") + message(STATUS "Using MIXXX_VCPKG_ROOT: ${MIXXX_VCPKG_ROOT}") else() message( STATUS - "MIXXX_VCPKG_ROOT not correct (missing $ENV{MIXXX_VCPKG_ROOT}/overlay/ports)" + "MIXXX_VCPKG_ROOT not correct (missing ${MIXXX_VCPKG_ROOT}/overlay/ports)" ) fatal_error_missing_env() endif() @@ -4705,7 +4705,7 @@ if(NOT CPACK_DEBIAN_PACKAGE_RELEASE) set(CPACK_DEBIAN_PACKAGE_RELEASE 1) endif() -set(CPACK_DEBIAN_DISTRIBUTION_RELEASES jammy mantic noble oracular) +set(CPACK_DEBIAN_DISTRIBUTION_RELEASES jammy noble oracular plucky) set(CPACK_DEBIAN_SOURCE_DIR ${CMAKE_SOURCE_DIR}) set( CPACK_DEBIAN_UPLOAD_PPA_SCRIPT diff --git a/cmake/modules/GitInfo.cmake b/cmake/modules/GitInfo.cmake index 199b1167b7b..6c881ff4db8 100644 --- a/cmake/modules/GitInfo.cmake +++ b/cmake/modules/GitInfo.cmake @@ -62,7 +62,7 @@ endif() # Get the current commit date if(NOT GIT_COMMIT_DATE) execute_process( - COMMAND git show --quiet --format=%cI --date=short + COMMAND git show --quiet --format=%cI --date=short --no-show-signature WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" OUTPUT_VARIABLE GIT_COMMIT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE diff --git a/res/linux/org.mixxx.Mixxx.desktop b/res/linux/org.mixxx.Mixxx.desktop index 4218ed78544..0d63ef8ff75 100644 --- a/res/linux/org.mixxx.Mixxx.desktop +++ b/res/linux/org.mixxx.Mixxx.desktop @@ -1,14 +1,54 @@ [Desktop Entry] Version=1.0 Name=Mixxx -Name[de]=Mixxx GenericName=Digital DJ interface GenericName[de]=Digitales DJ-System GenericName[fr]=Interface numérique pour DJ +GenericName[nl]=Digitaal DJ-systeem +GenericName[it]=Sistema DJ digitale +GenericName[es]=Sistema DJ digital +GenericName[cz]=Digitální DJ systém +GenericName[ru]=Цифровая диджейская система +GenericName[uk]=Цифрова діджейська система +GenericName[sl]=Digitalni DJ sistem +GenericName[pl]=Cyfrowy system DJ-ski +GenericName[zh]=数字 DJ 系统 +GenericName[sv]=Digitalt DJ-system +GenericName[pt]=Sistema de DJ digital +GenericName[ro]=Sistem DJ digital +GenericName[ja]=デジタルDJシステム +GenericName[hu]=Digitális DJ rendszer +GenericName[tr]=Dijital DJ sistemi +GenericName[gr]=Ψηφιακό σύστημα DJ +GenericName[fi]=Digitaalinen DJ-järjestelmä +GenericName[ko]=디지털 DJ 시스템 +GenericName[nb]=Digitalt DJ-system +GenericName[bg]=Цифрова DJ система Comment=A digital DJ interface Comment[de]=Ein digitales DJ-System Comment[fr]=Une interface numérique pour DJ +Comment[nl]=Een digitaal DJ-systeem +Comment[it]=Un sistema DJ digitale +Comment[es]=Un sistema de DJ digital +Comment[cz]=Digitální DJ systém +Comment[ru]=Цифровая диджейская система +Comment[uk]=Цифрова діджейська система +Comment[sl]=Digitalni DJ sistem +Comment[pl]=Cyfrowy system DJ-ski +Comment[zh]=数字 DJ 系统 +Comment[sv]=Ett digitalt DJ-system +Comment[pt]=Um sistema de DJ digital +Comment[ro]=Un sistem DJ digital +Comment[ja]=デジタルDJシステム +Comment[hu]=Digitális DJ rendszer +Comment[tr]=Dijital bir DJ sistemi +Comment[gr]=Ένα ψηφιακό σύστημα DJ +Comment[fi]=Digitaalinen DJ-järjestelmä +Comment[ko]=디지털 DJ 시스템 +Comment[nb]=Et digitalt DJ-system +Comment[bg]=Цифрова DJ система Exec=sh -c "pasuspender -- mixxx || mixxx" +Keywords=dj;music;alsa;jack:realtime;standalone; Terminal=false Icon=mixxx Type=Application diff --git a/res/linux/org.mixxx.Mixxx.metainfo.xml b/res/linux/org.mixxx.Mixxx.metainfo.xml index 76ffe6df25c..bfb094c13d3 100644 --- a/res/linux/org.mixxx.Mixxx.metainfo.xml +++ b/res/linux/org.mixxx.Mixxx.metainfo.xml @@ -96,7 +96,7 @@ Do not edit it manually. --> - +

Engine @@ -689,6 +689,37 @@ #14098 + + + + +

+ Controller Mappings +

+
    +
  • + Numark NS6II: Add new controller mapping + #11075 +
  • +
  • + Hercules Inpulse 300: Updated mapping + #14051 +
  • +
+

+ Fixes +

+
    +
  • + Deere (64 samplers): Bring back library in regular view + #14101 + #14097 +
  • +
  • + Enable R3 time-stretching with Rubberband 4.0.0 API version numbers + #14100 +
  • +
diff --git a/src/engine/controls/bpmcontrol.cpp b/src/engine/controls/bpmcontrol.cpp index e8ee01dd683..19c71feff58 100644 --- a/src/engine/controls/bpmcontrol.cpp +++ b/src/engine/controls/bpmcontrol.cpp @@ -1134,7 +1134,6 @@ void BpmControl::trackBeatsUpdated(mixxx::BeatsPointer pBeats) { frameInfo().trackEndPosition) : mixxx::Bpm()); } - qWarning() << "BpmControl::trackBeatsUpdated"; m_pBeats = pBeats; updateLocalBpm(); resetSyncAdjustment(); diff --git a/src/engine/sidechain/enginerecord.cpp b/src/engine/sidechain/enginerecord.cpp index b67d95a7241..a60e982258b 100644 --- a/src/engine/sidechain/enginerecord.cpp +++ b/src/engine/sidechain/enginerecord.cpp @@ -224,9 +224,9 @@ void EngineRecord::process(const CSAMPLE* pBuffer, const std::size_t bufferSize) } QString EngineRecord::getRecordedDurationStr() { - return QString("%1:%2") - .arg(m_recordedDuration / 60, 2, 'f', 0, '0') // minutes - .arg(m_recordedDuration % 60, 2, 'f', 0, '0'); // seconds + return QStringLiteral("%1:%2") + .arg(m_recordedDuration / 60, 2, 10, QChar('0')) // minutes + .arg(m_recordedDuration % 60, 2, 10, QChar('0')); // seconds } void EngineRecord::writeCueLine() { diff --git a/src/recording/recordingmanager.cpp b/src/recording/recordingmanager.cpp index 759a370be87..1483ace9cb5 100644 --- a/src/recording/recordingmanager.cpp +++ b/src/recording/recordingmanager.cpp @@ -209,9 +209,9 @@ void RecordingManager::slotDurationRecorded(quint64 duration) { // Copy from the implementation in enginerecord.cpp QString RecordingManager::getRecordedDurationStr(unsigned int duration) { - return QString("%1:%2") - .arg(duration / 60, 2, 'f', 0, '0') // minutes - .arg(duration % 60, 2, 'f', 0, '0'); // seconds + return QStringLiteral("%1:%2") + .arg(duration / 60, 2, 10, QChar('0')) // minutes + .arg(duration % 60, 2, 10, QChar('0')); // seconds } // Only called when recording is active. diff --git a/src/widget/wtracktableview.cpp b/src/widget/wtracktableview.cpp index c5241fea0e5..9783c3bdeed 100644 --- a/src/widget/wtracktableview.cpp +++ b/src/widget/wtracktableview.cpp @@ -1116,23 +1116,30 @@ void WTrackTableView::keyPressEvent(QKeyEvent* event) { break; } TrackModel* pTrackModel = getTrackModel(); - if (pTrackModel && !pTrackModel->isLocked()) { - if (event->matches(QKeySequence::Delete) || event->key() == Qt::Key_Backspace) { - removeSelectedTracks(); - return; - } - if (event->matches(QKeySequence::Cut)) { - cutSelectedTracks(); - return; + if (pTrackModel) { + if (!pTrackModel->isLocked()) { + if (event->matches(QKeySequence::Delete) || event->key() == Qt::Key_Backspace) { + removeSelectedTracks(); + return; + } + if (event->matches(QKeySequence::Cut)) { + cutSelectedTracks(); + return; + } + if (event->matches(QKeySequence::Paste)) { + pasteTracks(currentIndex()); + return; + } + if (event->key() == Qt::Key_Escape) { + clearSelection(); + setCurrentIndex(QModelIndex()); + } } + if (event->matches(QKeySequence::Copy)) { copySelectedTracks(); return; } - if (event->matches(QKeySequence::Paste)) { - pasteTracks(currentIndex()); - return; - } if (event->modifiers().testFlag(Qt::AltModifier) && (event->key() == Qt::Key_Up || event->key() == Qt::Key_Down || @@ -1144,9 +1151,14 @@ void WTrackTableView::keyPressEvent(QKeyEvent* event) { moveSelectedTracks(event); return; } - if (event->key() == Qt::Key_Escape) { - clearSelection(); - setCurrentIndex(QModelIndex()); + if (event->modifiers().testFlag(Qt::ControlModifier) && + event->modifiers().testFlag(Qt::ShiftModifier) && + event->key() == Qt::Key_C) { + // copy the cell content as native QKeySequence::Copy would + QKeyEvent ke = + QKeyEvent{QEvent::KeyPress, Qt::Key_C, Qt::ControlModifier}; + QTableView::keyPressEvent(&ke); + return; } } QTableView::keyPressEvent(event);