Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package shotcut for openSUSE:Factory checked in at 2021-04-08 21:32:06 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/shotcut (Old) and /work/SRC/openSUSE:Factory/.shotcut.new.2401 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "shotcut" Thu Apr 8 21:32:06 2021 rev:41 rq:883545 version:21.03.21 Changes: -------- --- /work/SRC/openSUSE:Factory/shotcut/shotcut.changes 2021-03-02 12:46:37.420416047 +0100 +++ /work/SRC/openSUSE:Factory/.shotcut.new.2401/shotcut.changes 2021-04-08 21:32:12.767810237 +0200 @@ -1,0 +2,14 @@ +Wed Apr 7 07:49:42 UTC 2021 - Michael Vetter <mvet...@suse.com> + +- Update to 21.03.21: + * Fixed <tractor> and blank considered missing and blocking export (broke in v21.01). + * Added an Ignore button to the missing files error dialog in Export. + * Fixed black frames appearing in Slideshow Generator (broke in v20.02). + * Fixed being able to use mouse wheel over Timeline and Keyframes zoom sliders (broke in v20.01). + * Improved sound quality with small changes in Speed with Pitch Compensation or Pitch audio filter (broke in v20.11). + * Fixed the Timeline clip audio waveform incorrect after adding transition by dragging the clip left. + * Fixed repairing a project file opened using a network path on Windows. + * Fixed writing a raw FLAC file does not set its duration. + * Fixed an elided file name in clip Properties can become the clip name. + +------------------------------------------------------------------- Old: ---- shotcut-21.02.27.tar.gz New: ---- shotcut-21.03.21.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ shotcut.spec ++++++ --- /var/tmp/diff_new_pack.mlDPGE/_old 2021-04-08 21:32:13.379810909 +0200 +++ /var/tmp/diff_new_pack.mlDPGE/_new 2021-04-08 21:32:13.383810914 +0200 @@ -25,7 +25,7 @@ %global __requires_exclude qmlimport\\((Shotcut\\.Controls|org\\.shotcut\\.qml).* Name: shotcut -Version: 21.02.27 +Version: 21.03.21 Release: 0 # This package creates a build time version from the current date and uses it to check # for updates. See patch1 and prep/build section. For reproducible builds. ++++++ shotcut-21.02.27.tar.gz -> shotcut-21.03.21.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/.github/workflows/build-linux-unstable.yml new/shotcut-21.03.21/.github/workflows/build-linux-unstable.yml --- old/shotcut-21.02.27/.github/workflows/build-linux-unstable.yml 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/.github/workflows/build-linux-unstable.yml 2021-03-19 04:39:38.000000000 +0100 @@ -11,7 +11,7 @@ jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v2 @@ -76,7 +76,7 @@ put packaging/linux/out/*.AppImage s3://builds.us.meltytech/shotcut/ - name: Install Snapcraft - uses: samuelmeuli/action-snapcraft@v1 + uses: samuelmeuli/action-snapcraft@v1.2.0 with: snapcraft_token: ${{ secrets.SNAPCRAFT_TOKEN }} use_lxd: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/.github/workflows/build-linux.yml new/shotcut-21.03.21/.github/workflows/build-linux.yml --- old/shotcut-21.02.27/.github/workflows/build-linux.yml 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/.github/workflows/build-linux.yml 2021-03-19 04:39:38.000000000 +0100 @@ -11,7 +11,7 @@ jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v2 @@ -72,7 +72,7 @@ put packaging/linux/out/*.AppImage s3://builds.us.meltytech/shotcut/ - name: Install Snapcraft - uses: samuelmeuli/action-snapcraft@v1 + uses: samuelmeuli/action-snapcraft@v1.2.0 with: snapcraft_token: ${{ secrets.SNAPCRAFT_TOKEN }} use_lxd: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/.github/workflows/build-sdk-windows-unstable.yml new/shotcut-21.03.21/.github/workflows/build-sdk-windows-unstable.yml --- old/shotcut-21.02.27/.github/workflows/build-sdk-windows-unstable.yml 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/.github/workflows/build-sdk-windows-unstable.yml 2021-03-19 04:39:38.000000000 +0100 @@ -1,4 +1,4 @@ -name: build-shotcut-sdk-windows +name: build-shotcut-sdk-windows-unstable on: workflow_dispatch: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/scripts/build-shotcut-msys2.sh new/shotcut-21.03.21/scripts/build-shotcut-msys2.sh --- old/shotcut-21.02.27/scripts/build-shotcut-msys2.sh 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/scripts/build-shotcut-msys2.sh 2021-03-19 04:39:38.000000000 +0100 @@ -42,8 +42,8 @@ SHOTCUT_REVISION= SHOTCUT_VERSION=$(date '+%y.%m.%d') ENABLE_BIGSH0T=1 -BIGSH0T_HEAD=1 -BIGSH0T_REVISION= +BIGSH0T_HEAD=0 +BIGSH0T_REVISION="5fad6d3b5963ce69141e9debcc3b733b84a0842d" ENABLE_ZIMG=1 ZIMG_HEAD=1 ZIMG_REVISION= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/scripts/build-shotcut.sh new/shotcut-21.03.21/scripts/build-shotcut.sh --- old/shotcut-21.02.27/scripts/build-shotcut.sh 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/scripts/build-shotcut.sh 2021-03-19 04:39:38.000000000 +0100 @@ -68,11 +68,11 @@ SHOTCUT_REVISION= SHOTCUT_VERSION=$(date '+%y.%m.%d') ENABLE_RUBBERBAND=1 -RUBBERBAND_HEAD=1 -RUBBERBAND_REVISION= +RUBBERBAND_HEAD=0 +RUBBERBAND_REVISION="v1.9" ENABLE_BIGSH0T=1 -BIGSH0T_HEAD=1 -BIGSH0T_REVISION= +BIGSH0T_HEAD=0 +BIGSH0T_REVISION="5fad6d3b5963ce69141e9debcc3b733b84a0842d" ENABLE_ZIMG=1 ZIMG_HEAD=1 ZIMG_REVISION= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/dialogs/multifileexportdialog.cpp new/shotcut-21.03.21/src/dialogs/multifileexportdialog.cpp --- old/shotcut-21.02.27/src/dialogs/multifileexportdialog.cpp 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/dialogs/multifileexportdialog.cpp 2021-03-19 04:39:38.000000000 +0100 @@ -58,7 +58,7 @@ // Directory glayout->addWidget(new QLabel(tr("Directory")), col, 0, Qt::AlignRight); QHBoxLayout* dirHbox = new QHBoxLayout(); - m_dir = new QLineEdit(directory); + m_dir = new QLineEdit(QDir::toNativeSeparators(directory)); m_dir->setReadOnly(true); QPushButton* browseButton = new QPushButton(this); browseButton->setIcon(QIcon::fromTheme("document-open", QIcon(":/icons/oxygen/32x32/actions/document-open.png"))); @@ -209,7 +209,7 @@ filename = appendField(filename, m_field2, i); filename = appendField(filename, m_field3, i); if (!filename.isEmpty()) { - filename = m_dir->text() + "/" + filename + "." + m_ext->text(); + filename = m_dir->text() + QDir::separator() + filename + "." + m_ext->text(); m_stringList << filename; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/docks/encodedock.cpp new/shotcut-21.03.21/src/docks/encodedock.cpp --- old/shotcut-21.02.27/src/docks/encodedock.cpp 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/docks/encodedock.cpp 2021-03-19 04:39:38.000000000 +0100 @@ -392,10 +392,10 @@ ui->fromCombo->clear(); if (MAIN.isMultitrackValid()) ui->fromCombo->addItem(tr("Timeline"), "timeline"); - if (MAIN.playlist() && MAIN.playlist()->count() > 0) + if (MAIN.playlist() && MAIN.playlist()->count() > 0) { ui->fromCombo->addItem(tr("Playlist"), "playlist"); - if (MAIN.playlist() && MAIN.playlist()->count() > 1) ui->fromCombo->addItem(tr("Each Playlist Item"), "batch"); + } if (MLT.isClip() && MLT.producer() && MLT.producer()->is_valid() && qstrcmp("_hide", MLT.producer()->get("resource"))) { ui->fromCombo->addItem(tr("Source"), "clip"); @@ -1119,7 +1119,7 @@ && ui->dualPassCheckbox->isEnabled() && ui->dualPassCheckbox->isChecked())? 1 : 0; if (!service) { // For each playlist item. - if (MAIN.playlist() && MAIN.playlist()->count() > 1) { + if (MAIN.playlist() && MAIN.playlist()->count() > 0) { int n = MAIN.playlist()->count(); for (int i = 0; i < n; i++) { QScopedPointer<Mlt::ClipInfo> info(MAIN.playlist()->clip_info(i)); @@ -1406,7 +1406,7 @@ if (ui->fromCombo->currentData().toString() == "batch") { caption = tr("Export Files"); MultiFileExportDialog dialog(tr("Export Each Playlist Item"), MAIN.playlist(), - QFileInfo(directory).absolutePath(), QFileInfo(MAIN.fileName()).completeBaseName(), m_extension, this); + QDir(directory).absolutePath(), QFileInfo(MAIN.fileName()).completeBaseName(), m_extension, this); if (dialog.exec() != QDialog::Accepted) { return; } @@ -2091,11 +2091,13 @@ tr("Your project is missing some files.\n\n" "Save your project, close it, and reopen it.\n" "Shotcut will attempt to repair your project."), - QMessageBox::Ok, + QMessageBox::Ok | QMessageBox::Ignore, this); dialog.setWindowModality(QmlApplication::dialogModality()); dialog.setDefaultButton(QMessageBox::Ok); - dialog.exec(); + if (QMessageBox::Ignore == dialog.exec()) { + return false; + } return true; } return false; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/docks/timelinedock.cpp new/shotcut-21.03.21/src/docks/timelinedock.cpp --- old/shotcut-21.02.27/src/docks/timelinedock.cpp 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/docks/timelinedock.cpp 2021-03-19 04:39:38.000000000 +0100 @@ -1259,8 +1259,10 @@ if (clipIndex >= 0) m_model.removeClip(trackIndex, clipIndex, Settings.timelineRippleAllTracks()); } + disconnect(&m_model, &MultitrackModel::appended, this, &TimelineDock::selectClip); MAIN.undoStack()->push( new Timeline::AppendCommand(m_model, trackIndex, MLT.XML(playlist), skipProxy)); + connect(&m_model, &MultitrackModel::appended, this, &TimelineDock::selectClip, Qt::QueuedConnection); } void TimelineDock::splitClip(int trackIndex, int clipIndex) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/jobs/ffprobejob.cpp new/shotcut-21.03.21/src/jobs/ffprobejob.cpp --- old/shotcut-21.02.27/src/jobs/ffprobejob.cpp 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/jobs/ffprobejob.cpp 2021-03-19 04:39:38.000000000 +0100 @@ -43,7 +43,7 @@ QString shotcutPath = qApp->applicationDirPath(); QFileInfo ffprobePath(shotcutPath, "ffprobe"); setReadChannel(QProcess::StandardOutput); - LOG_DEBUG() << ffprobePath.absoluteFilePath() << m_args; + LOG_DEBUG() << ffprobePath.absoluteFilePath() + " " + m_args.join(' '); QProcess::start(ffprobePath.absoluteFilePath(), m_args); AbstractJob::start(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/jobs/meltjob.cpp new/shotcut-21.03.21/src/jobs/meltjob.cpp --- old/shotcut-21.02.27/src/jobs/meltjob.cpp 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/jobs/meltjob.cpp 2021-03-19 04:39:38.000000000 +0100 @@ -108,7 +108,7 @@ } else { args << QUrl::toPercentEncoding(xmlPath()); } - LOG_DEBUG() << meltPath.absoluteFilePath() << args; + LOG_DEBUG() << meltPath.absoluteFilePath() + " " + args.join(' '); #ifndef Q_OS_MAC QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); // These environment variables fix rich text rendering for high DPI diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/mainwindow.cpp new/shotcut-21.03.21/src/mainwindow.cpp --- old/shotcut-21.02.27/src/mainwindow.cpp 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/mainwindow.cpp 2021-03-19 04:39:38.000000000 +0100 @@ -1017,11 +1017,10 @@ .arg(fi.completeBaseName()).arg(tr("Repaired")).arg(fi.suffix())); repaired.open(QIODevice::WriteOnly); LOG_INFO() << "repaired MLT XML file name" << repaired.fileName(); - QFile temp(checker.tempFileName()); - if (temp.exists() && repaired.exists()) { - temp.open(QIODevice::ReadOnly); - QByteArray xml = temp.readAll(); - temp.close(); + if (checker.tempFile().exists()) { + checker.tempFile().open(); + QByteArray xml = checker.tempFile().readAll(); + checker.tempFile().close(); qint64 n = repaired.write(xml); while (n > 0 && n < xml.size()) { @@ -1393,7 +1392,7 @@ checker.setLocale(); LOG_INFO() << "decimal point" << MLT.decimalPoint(); } - QString urlToOpen = checker.isUpdated()? checker.tempFileName() : url; + QString urlToOpen = checker.isUpdated()? checker.tempFile().fileName() : url; if (!MLT.open(QDir::fromNativeSeparators(urlToOpen), QDir::fromNativeSeparators(url)) && MLT.producer() && MLT.producer()->is_valid()) { Mlt::Properties* props = const_cast<Mlt::Properties*>(properties); @@ -4059,6 +4058,7 @@ void MainWindow::on_actionExportFrame_triggered() { + if (!MLT.producer() || !MLT.producer()->is_valid()) return; filterController()->setCurrentFilter(QmlFilter::DeselectCurrentFilter); Mlt::GLWidget* glw = qobject_cast<Mlt::GLWidget*>(MLT.videoWidget()); connect(glw, SIGNAL(imageReady()), SLOT(onGLWidgetImageReady())); @@ -4071,8 +4071,8 @@ { Mlt::GLWidget* glw = qobject_cast<Mlt::GLWidget*>(MLT.videoWidget()); QImage image = glw->image(); + disconnect(glw, SIGNAL(imageReady()), this, nullptr); if (Settings.playerGPU() || Settings.playerPreviewScale()) { - disconnect(glw, SIGNAL(imageReady()), this, 0); MLT.setPreviewScale(Settings.playerPreviewScale()); } if (!image.isNull()) { @@ -4642,7 +4642,7 @@ } if (checker.isUpdated()) { QFile::remove(fileName); - fileName = checker.tempFileName(); + fileName = checker.tempFile().fileName(); } // Open the temporary file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/mltxmlchecker.cpp new/shotcut-21.03.21/src/mltxmlchecker.cpp --- old/shotcut-21.02.27/src/mltxmlchecker.cpp 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/mltxmlchecker.cpp 2021-03-19 04:39:38.000000000 +0100 @@ -450,6 +450,10 @@ if (fileName != "vidstab.trf") // not the generic <producer> resource if (fileName != "<producer>") + // not an invalid <tractor> + if (fileName != "<tractor>") + // not an invalid blank + if (mlt_service != "blank" || fileName != "blank") // not a URL if (!m_resource.info.filePath().isEmpty() && !isNetworkResource(m_resource.info.filePath())) // not an image sequence @@ -620,11 +624,16 @@ m_isUpdated = true; for (auto& p : properties) { if (p.first == "resource") { - if (QFileInfo(p.second).isRelative()) { + auto pathName = p.second; + auto plain = QLatin1String("plain:"); + if (pathName.startsWith(plain)) { + pathName = pathName.mid(plain.size()); + } + if (QFileInfo(pathName).isRelative()) { QDir projectDir(QFileInfo(m_tempFile->fileName()).dir()); - p.second = projectDir.filePath(p.second); + pathName = projectDir.filePath(pathName); } - QFile file(p.second); + QFile file(pathName); if (file.open(QIODevice::ReadOnly)) { p.first = "html"; p.second = QString::fromUtf8(file.readAll()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/mltxmlchecker.h new/shotcut-21.03.21/src/mltxmlchecker.h --- old/shotcut-21.02.27/src/mltxmlchecker.h 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/mltxmlchecker.h 2021-03-19 04:39:38.000000000 +0100 @@ -52,7 +52,7 @@ bool hasEffects() const { return m_hasEffects; } bool isCorrected() const { return m_isCorrected; } bool isUpdated() const { return m_isUpdated; } - QString tempFileName() const { return m_tempFile->fileName(); } + QTemporaryFile& tempFile() const { return *m_tempFile; } QStandardItemModel& unlinkedFilesModel() { return m_unlinkedFilesModel; } void setLocale(); bool usesLocale() const { return m_usesLocale; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/models/multitrackmodel.cpp new/shotcut-21.03.21/src/models/multitrackmodel.cpp --- old/shotcut-21.02.27/src/models/multitrackmodel.cpp 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/models/multitrackmodel.cpp 2021-03-19 04:39:38.000000000 +0100 @@ -1612,6 +1612,7 @@ roles << StartRole; roles << InPointRole; roles << DurationRole; + roles << AudioLevelsRole; emit dataChanged(modelIndex, modelIndex, roles); emit modified(); return targetIndex + 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/proxymanager.cpp new/shotcut-21.03.21/src/proxymanager.cpp --- old/shotcut-21.02.27/src/proxymanager.cpp 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/proxymanager.cpp 2021-03-19 04:39:38.000000000 +0100 @@ -274,10 +274,7 @@ if (p.first == "resource") { // Convert to relative if (!root.isEmpty() && newResource.startsWith(root)) { - if (root.endsWith('/')) - newResource = newResource.mid(root.size()); - else - newResource = newResource.mid(root.size() + 1); + newResource = newResource.mid(root.size()); } if (service == "timewarp") { newProperties << MltProperty(p.first, QString("%1:%2").arg(speed).arg(newResource)); @@ -304,7 +301,7 @@ properties.clear(); } -bool ProxyManager::filterXML(QString& xmlString, const QString& root) +bool ProxyManager::filterXML(QString& xmlString, QString root) { QString output; QXmlStreamReader xml(xmlString); @@ -312,6 +309,12 @@ bool isPropertyElement = false; QVector<MltProperty> properties; + // This prevents processProperties() from mis-matching a resource path that begins with root + // when it is converting to relative paths. + if (!root.isEmpty() && root.endsWith('/')) { + root.append('/'); + } + newXml.setAutoFormatting(true); newXml.setAutoFormattingIndent(2); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/proxymanager.h new/shotcut-21.03.21/src/proxymanager.h --- old/shotcut-21.02.27/src/proxymanager.h 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/proxymanager.h 2021-03-19 04:39:38.000000000 +0100 @@ -45,7 +45,7 @@ static void generateVideoProxy(Mlt::Producer& producer, bool fullRange, ScanMode scanMode = Automatic, const QPoint& aspectRatio = QPoint(), bool replace = true); static void generateImageProxy(Mlt::Producer& producer, bool replace = true); - static bool filterXML(QString& xml, const QString& root); + static bool filterXML(QString& xml, QString root); static bool fileExists(Mlt::Producer& producer); static bool filePending(Mlt::Producer& producer); static bool isValidImage(Mlt::Producer& producer); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/qml/views/keyframes/ZoomSlider.qml new/shotcut-21.03.21/src/qml/views/keyframes/ZoomSlider.qml --- old/shotcut-21.02.27/src/qml/views/keyframes/ZoomSlider.qml 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/qml/views/keyframes/ZoomSlider.qml 2021-03-19 04:39:38.000000000 +0100 @@ -41,6 +41,7 @@ to: 3.0 value: 1 focusPolicy: Qt.NoFocus + wheelEnabled: true function setScaleFactor() { timeScale = Math.pow(value, 3) + 0.01 } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/qml/views/timeline/ZoomSlider.qml new/shotcut-21.03.21/src/qml/views/timeline/ZoomSlider.qml --- old/shotcut-21.02.27/src/qml/views/timeline/ZoomSlider.qml 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/qml/views/timeline/ZoomSlider.qml 2021-03-19 04:39:38.000000000 +0100 @@ -41,6 +41,7 @@ to: 3.0 value: 1 focusPolicy: Qt.NoFocus + wheelEnabled: true function setScaleFactor() { multitrack.scaleFactor = Math.pow(value, 3) + 0.01 } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/util.cpp new/shotcut-21.03.21/src/util.cpp --- old/shotcut-21.02.27/src/util.cpp 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/util.cpp 2021-03-19 04:39:38.000000000 +0100 @@ -480,6 +480,19 @@ } } return false; +#elif defined(__FreeBSD__) + QProcess p; + p.start("sysctl -n hw.usermem"); + p.waitForFinished(); + auto lines = p.readAllStandardOutput(); + p.close(); + bool ok = false; + auto availableKB = lines.toUInt(&ok); + if (ok) { + return availableKB < kLowMemoryThresholdKB; + } + + return false; #elif defined(Q_OS_LINUX) unsigned int availableKB = UINT_MAX; QFile meminfo("/proc/meminfo"); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/widgets/avformatproducerwidget.cpp new/shotcut-21.03.21/src/widgets/avformatproducerwidget.cpp --- old/shotcut-21.02.27/src/widgets/avformatproducerwidget.cpp 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/widgets/avformatproducerwidget.cpp 2021-03-19 04:39:38.000000000 +0100 @@ -90,7 +90,6 @@ , ui(new Ui::AvformatProducerWidget) , m_defaultDuration(-1) , m_recalcDuration(true) - , m_userDefinedCaption(false) { ui->setupUi(this); ui->timelineDurationText->setFixedWidth(ui->durationSpinBox->width()); @@ -294,15 +293,9 @@ else caption = name; m_producer->set(kShotcutCaptionProperty, caption.toUtf8().constData()); - ui->filenameLabel->setText(ui->filenameLabel->fontMetrics().elidedText(caption, Qt::ElideLeft, width() - 30)); - m_userDefinedCaption = false; - } else { - ui->filenameLabel->setText(ui->filenameLabel->fontMetrics().elidedText(caption, Qt::ElideLeft, width() - 30)); - auto computedCaption = name; - if (warpSpeed != 1.0) - computedCaption = QString("%1 (%2x)").arg(name).arg(warpSpeed); - m_userDefinedCaption = caption != computedCaption; } + ui->filenameLabel->setText(caption); + ui->filenameLabel->setCursorPosition(caption.length()); ui->filenameLabel->setToolTip(resource); ui->notesTextEdit->setPlainText(QString::fromUtf8(m_producer->get(kCommentProperty))); ui->durationSpinBox->setValue(m_producer->get_length()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/shotcut-21.02.27/src/widgets/avformatproducerwidget.h new/shotcut-21.03.21/src/widgets/avformatproducerwidget.h --- old/shotcut-21.02.27/src/widgets/avformatproducerwidget.h 2021-02-27 03:57:47.000000000 +0100 +++ new/shotcut-21.03.21/src/widgets/avformatproducerwidget.h 2021-03-19 04:39:38.000000000 +0100 @@ -124,7 +124,6 @@ int m_defaultDuration; bool m_recalcDuration; bool m_askToConvert; - bool m_userDefinedCaption; void reopen(Mlt::Producer* p); void recreateProducer();