[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdenlive] src: Merge branch '16.12'
From:       Jean-Baptiste Mardelle <null () kde ! org>
Date:       2017-01-08 22:00:31
Message-ID: E1cQLVv-0000Gh-KR () code ! kde ! org
[Download RAW message or body]

Git commit 5f8a15749eba57a785e3a405fc5a87e89b9f79fd by Jean-Baptiste Mardelle.
Committed on 08/01/2017 at 22:00.
Pushed by mardelle into branch 'master'.

Merge branch '16.12'

M  +19   -18   src/bin/bin.cpp
M  +3    -3    src/bin/bin.h
M  +13   -13   src/bin/projectclip.cpp
M  +2    -2    src/bin/projectclip.h
M  +2    -2    src/capture/managecapturesdialog.cpp
M  +3    -3    src/dialogs/clipcreationdialog.cpp
M  +6    -6    src/dialogs/kdenlivesettingsdialog.cpp
M  +6    -6    src/doc/kdenlivedoc.cpp
M  +1    -1    src/doc/kdenlivedoc.h
M  +1    -1    src/doc/kthumb.cpp
M  +39   -39   src/dvdwizard/dvdwizard.cpp
M  +5    -5    src/dvdwizard/dvdwizardmenu.cpp
M  +8    -8    src/dvdwizard/dvdwizardvob.cpp
M  +1    -1    src/effectstack/collapsibleeffect.cpp
M  +1    -1    src/effectstack/effectstackview2.cpp
M  +1    -1    src/effectstack/parametercontainer.cpp
M  +12   -12   src/library/librarywidget.cpp
M  +3    -3    src/mainwindow.cpp
M  +1    -1    src/mltconnection.cpp
M  +2    -2    src/mltcontroller/bincontroller.cpp
M  +1    -1    src/mltcontroller/bincontroller.h
M  +23   -18   src/mltcontroller/clipcontroller.cpp
M  +2    -3    src/mltcontroller/clipcontroller.h
M  +7    -7    src/mltcontroller/clippropertiescontroller.cpp
M  +1    -1    src/monitor/monitor.cpp
M  +11   -11   src/monitor/recmonitor.cpp
M  +3    -3    src/project/clipmanager.cpp
M  +3    -3    src/project/clipstabilize.cpp
M  +6    -6    src/project/cliptranscode.cpp
M  +12   -10   src/project/dialogs/archivewidget.cpp
M  +14   -14   src/project/dialogs/projectsettings.cpp
M  +1    -1    src/project/dialogs/projectsettings.h
M  +5    -6    src/project/dialogs/slideshowclip.cpp
M  +6    -6    src/project/jobs/cutclipjob.cpp
M  +5    -5    src/project/jobs/filterjob.cpp
M  +1    -1    src/project/jobs/proxyclipjob.cpp
M  +2    -2    src/project/projectmanager.cpp
M  +2    -2    src/stopmotion/stopmotion.cpp
M  +5    -5    src/timeline/customtrackview.cpp
M  +1    -1    src/timeline/customtrackview.h
M  +2    -2    src/timeline/timeline.cpp
M  +7    -7    src/titler/titlewidget.cpp
M  +1    -1    src/utils/resourcewidget.cpp

https://commits.kde.org/kdenlive/5f8a15749eba57a785e3a405fc5a87e89b9f79fd

diff --cc src/bin/bin.cpp
index 01fe41f62,099f9ef1b..4801f1d08
--- a/src/bin/bin.cpp
+++ b/src/bin/bin.cpp
@@@ -489,13 -481,13 +489,13 @@@ Bin::Bin(QWidget *parent) 
      m_infoMessage = new BinMessageWidget;
      m_layout->addWidget(m_infoMessage);
      m_infoMessage->setCloseButtonVisible(false);
 -    connect(m_infoMessage, SIGNAL(linkActivated(const QString &)), this, \
                SLOT(slotShowJobLog()));
 -    connect(m_infoMessage, SIGNAL(messageClosing()), this, \
SLOT(slotResetInfoMessage()));  +    connect(m_infoMessage, \
&KMessageWidget::linkActivated, this, &Bin::slotShowJobLog);  +    \
connect(m_infoMessage, &BinMessageWidget::messageClosing, this, \
&Bin::slotResetInfoMessage);  //m_infoMessage->setWordWrap(true);
      m_infoMessage->hide();
-     connect(this, SIGNAL(requesteInvalidRemoval(QString, QUrl, QString)), this, \
                SLOT(slotQueryRemoval(QString, QUrl, QString)));
 -    connect(this, SIGNAL(requesteInvalidRemoval(QString,QString,QString)), this, \
SLOT(slotQueryRemoval(QString,QString,QString))); ++    connect(this, \
SIGNAL(requesteInvalidRemoval(QString, QString, QString)), this, \
                SLOT(slotQueryRemoval(QString, QString, QString)));
      connect(this, &Bin::refreshAudioThumbs, this, &Bin::doRefreshAudioThumbs);
 -    connect(this, SIGNAL(displayBinMessage(QString,KMessageWidget::MessageType)), \
this, SLOT(doDisplayMessage(QString,KMessageWidget::MessageType)));  +    \
connect(this, SIGNAL(displayBinMessage(QString, KMessageWidget::MessageType)), this, \
SLOT(doDisplayMessage(QString, KMessageWidget::MessageType)));  }
  
  Bin::~Bin()
@@@ -914,13 -884,13 +914,13 @@@ void Bin::slotReloadClip(
          if (!ix.isValid() || ix.column() != 0) {
              continue;
          }
 -        AbstractProjectItem *item = \
                static_cast<AbstractProjectItem*>(m_proxyModel->mapToSource(ix).internalPointer());
                
 -        ProjectClip *currentItem = qobject_cast<ProjectClip*>(item);
 +        AbstractProjectItem *item = static_cast<AbstractProjectItem \
*>(m_proxyModel->mapToSource(ix).internalPointer());  +        ProjectClip \
*currentItem = qobject_cast<ProjectClip *>(item);  if (currentItem) {
 -	    emit openClip(NULL);
 +            emit openClip(Q_NULLPTR);
              if (currentItem->clipType() == Playlist) {
                  //Check if a clip inside playlist is missing
-                 QString path = currentItem->url().path();
+                 QString path = currentItem->url();
                  QFile f(path);
                  QDomDocument doc;
                  doc.setContent(&f, false);
@@@ -960,20 -930,20 +960,20 @@@ void Bin::slotLocateClip(
          if (!ix.isValid() || ix.column() != 0) {
              continue;
          }
 -        AbstractProjectItem *item = \
                static_cast<AbstractProjectItem*>(m_proxyModel->mapToSource(ix).internalPointer());
                
 -        ProjectClip *currentItem = qobject_cast<ProjectClip*>(item);
 +        AbstractProjectItem *item = static_cast<AbstractProjectItem \
*>(m_proxyModel->mapToSource(ix).internalPointer());  +        ProjectClip \
*currentItem = qobject_cast<ProjectClip *>(item);  if (currentItem) {
-             QUrl url = currentItem->url().adjusted(QUrl::RemoveFilename);
 -	  QUrl url = QUrl::fromLocalFile(currentItem->url()).adjusted(QUrl::RemoveFilename);
                
 -	  bool exists = QFile(url.toLocalFile()).exists();
 -	  if (currentItem->hasUrl() && exists) {
 -	    QDesktopServices::openUrl(url);
 -	    qDebug()<<"  / / "+url.toString();
 -	  } else {
 -	    if(!exists){
 -	      emitMessage(i18n("Couldn't locate ") + QString(" ("+url.toString()+")"), \
                100, ErrorMessage);
 -	    }
 -	    return;
 -	  }
++            QUrl url = \
QUrl::fromLocalFile(currentItem->url()).adjusted(QUrl::RemoveFilename);  +            \
bool exists = QFile(url.toLocalFile()).exists();  +            if \
(currentItem->hasUrl() && exists) {  +                QDesktopServices::openUrl(url);
 +                qCDebug(KDENLIVE_LOG) << "  / / " + url.toString();
 +            } else {
-                 if (!exists) {
++                if(!exists) {
 +                    emitMessage(i18n("Couldn't locate ") + QString(" (" + \
url.toString() + ")"), 100, ErrorMessage);  +                }
 +                return;
 +            }
          }
      }
  }
@@@ -2652,21 -2564,21 +2652,21 @@@ void Bin::slotItemDropped(const QList<Q
          if (type.inherits(QStringLiteral("inode/directory"))) {
              // user dropped a folder, import its files
              clipsToAdd.removeAll(file);
-             QDir dir(file.path());
+             QDir dir(file.toLocalFile());
              QStringList result = dir.entryList(QDir::Files);
 -            QList <QUrl> folderFiles;
 -            foreach(const QString & path, result) {
 +            QList<QUrl> folderFiles;
 +            foreach (const QString &path, result) {
                  folderFiles.append(QUrl::fromLocalFile(dir.absoluteFilePath(path)));
  }
 -            if (folderFiles.count() > 0) {
 -		QString folderId = slotAddFolder(dir.dirName());
 -		QModelIndex ind = getIndexForId(folderId, true);
 -		QStringList newFolderInfo;
 -		if (ind.isValid()) {
 -			newFolderInfo = getFolderInfo(m_proxyModel->mapFromSource(ind));
 -		}
 -		ClipCreationDialog::createClipsCommand(m_doc, folderFiles, newFolderInfo, this);
 -	    }
 +            if (!folderFiles.isEmpty()) {
 +                QString folderId = slotAddFolder(dir.dirName());
 +                QModelIndex ind = getIndexForId(folderId, true);
 +                QStringList newFolderInfo;
 +                if (ind.isValid()) {
 +                    newFolderInfo = \
getFolderInfo(m_proxyModel->mapFromSource(ind));  +                }
 +                ClipCreationDialog::createClipsCommand(m_doc, folderFiles, \
newFolderInfo, this);  +            }
          }
      }
      if (!clipsToAdd.isEmpty()) {
@@@ -2674,7 -2586,7 +2674,7 @@@
      }
  }
  
- void Bin::slotExpandUrl(const ItemInfo &info, const QUrl &url, QUndoCommand \
                *command)
 -void Bin::slotExpandUrl(ItemInfo info, const QString &url, QUndoCommand *command)
++void Bin::slotExpandUrl(const ItemInfo &info, const QString &url, QUndoCommand \
*command)  {
      QStringList folderInfo;
      // Create folder to hold imported clips
@@@ -2691,10 -2603,10 +2691,10 @@@
      if (doc.documentElement().isNull()) {
          invalid = true;
      }
 -    QDomNodeList producers = doc.documentElement().elementsByTagName("producer");
 -    QDomNodeList tracks = doc.documentElement().elementsByTagName("track");
 +    QDomNodeList producers = \
doc.documentElement().elementsByTagName(QStringLiteral("producer"));  +    \
QDomNodeList tracks = \
doc.documentElement().elementsByTagName(QStringLiteral("track"));  if (invalid || \
                producers.isEmpty()) {
-         doDisplayMessage(i18n("Playlist clip %1 is invalid.", url.fileName()), \
KMessageWidget::Warning); +         doDisplayMessage(i18n("Playlist clip %1 is \
invalid.", QFileInfo(url).fileName()), KMessageWidget::Warning);  delete command;
          return;
      }
@@@ -2973,18 -2862,16 +2973,18 @@@ Timecode Bin::projectTimecode() cons
      return m_doc->timecode();
  }
  
 -void Bin::slotStartFilterJob(const ItemInfo &info, const QString&id, QMap <QString, \
QString> &filterParams, QMap <QString, QString> &consumerParams, QMap <QString, \
QString> &extraParams)  +void Bin::slotStartFilterJob(const ItemInfo &info, const \
QString &id, QMap<QString, QString> &filterParams, QMap<QString, QString> \
&consumerParams, QMap<QString, QString> &extraParams)  {
      ProjectClip *clip = getBinClip(id);
 -    if (!clip) return;
 +    if (!clip) {
 +        return;
 +    }
  
 -    QMap <QString, QString> producerParams = QMap <QString, QString> ();
 +    QMap<QString, QString> producerParams = QMap<QString, QString> ();
-     producerParams.insert(QStringLiteral("producer"), clip->url().path());
+     producerParams.insert(QStringLiteral("producer"), clip->url());
      if (info.cropDuration != GenTime()) {
          producerParams.insert(QStringLiteral("in"), QString::number((int) \
                info.cropStart.frames(m_doc->fps())));
 -        producerParams.insert(QStringLiteral("out"), QString::number((int) \
(info.cropStart + info.cropDuration).frames(m_doc->fps())));  +        \
producerParams.insert(QStringLiteral("out"), QString::number((int)(info.cropStart + \
                info.cropDuration).frames(m_doc->fps())));
          extraParams.insert(QStringLiteral("clipStartPos"), QString::number((int) \
                info.startPos.frames(m_doc->fps())));
          extraParams.insert(QStringLiteral("clipTrack"), \
QString::number(info.track));  } else {
@@@ -3003,30 -2890,27 +3003,30 @@@ void Bin::focusBinView() cons
  void Bin::slotOpenClip()
  {
      ProjectClip *clip = getFirstSelectedClip();
 -    if (!clip) return;
 +    if (!clip) {
 +        return;
 +    }
      switch (clip->clipType()) {
 -        case Text:
 -        case TextTemplate:
 -            showTitleWidget(clip);
 -            break;
 -        case Image:
 -            if (KdenliveSettings::defaultimageapp().isEmpty())
 -                KMessageBox::sorry(QApplication::activeWindow(), i18n("Please set a \
                default application to open images in the Settings dialog"));
 -            else
 -                QProcess::startDetached(KdenliveSettings::defaultimageapp(), \
                QStringList() << clip->url());
 -            break;
 -        case Audio:
 -            if (KdenliveSettings::defaultaudioapp().isEmpty())
 -                KMessageBox::sorry(QApplication::activeWindow(), i18n("Please set a \
                default application to open audio files in the Settings dialog"));
 -            else
 -                QProcess::startDetached(KdenliveSettings::defaultaudioapp(), \
                QStringList() << clip->url());
 -            break;
 -        default:
 -            break;
 +    case Text:
 +    case TextTemplate:
 +        showTitleWidget(clip);
 +        break;
 +    case Image:
 +        if (KdenliveSettings::defaultimageapp().isEmpty()) {
 +            KMessageBox::sorry(QApplication::activeWindow(), i18n("Please set a \
default application to open images in the Settings dialog"));  +        } else {
-             QProcess::startDetached(KdenliveSettings::defaultimageapp(), \
QStringList() << clip->url().path()); ++            \
QProcess::startDetached(KdenliveSettings::defaultimageapp(), QStringList() << \
clip->url());  +        }
 +        break;
 +    case Audio:
 +        if (KdenliveSettings::defaultaudioapp().isEmpty()) {
 +            KMessageBox::sorry(QApplication::activeWindow(), i18n("Please set a \
default application to open audio files in the Settings dialog"));  +        } else {
-             QProcess::startDetached(KdenliveSettings::defaultaudioapp(), \
QStringList() << clip->url().path()); ++            \
QProcess::startDetached(KdenliveSettings::defaultaudioapp(), QStringList() << \
clip->url());  +        }
 +        break;
 +    default:
 +        break;
      }
  }
  
@@@ -3481,12 -3313,10 +3481,12 @@@ void Bin::slotShowDescColumn(bool show
      }
  }
  
- void Bin::slotQueryRemoval(const QString &id, const QUrl &url, const QString \
&errorMessage) + void Bin::slotQueryRemoval(const QString &id, const QString &url, \
const QString &errorMessage)  {
      if (m_invalidClipDialog) {
 -        if (!url.isEmpty()) m_invalidClipDialog->addClip(id, url);
 +        if (!url.isEmpty()) {
-             m_invalidClipDialog->addClip(id, url.toLocalFile());
++            m_invalidClipDialog->addClip(id, url);
 +        }
          return;
      }
      QString message = i18n("Clip is invalid, will be removed from project.");
diff --cc src/bin/bin.h
index 8684bcf8b,32c68ff7b..4687d992f
--- a/src/bin/bin.h
+++ b/src/bin/bin.h
@@@ -642,7 -645,7 +642,7 @@@ public slots
      void slotEffectDropped(QString id, QDomElement);
      /** @brief Request current frame from project monitor. */
      void slotGetCurrentProjectImage(bool request);
-     void slotExpandUrl(const ItemInfo &info, const QUrl &url, QUndoCommand \
                *command);
 -    void slotExpandUrl(ItemInfo info, const QString &url, QUndoCommand *command);
++    void slotExpandUrl(const ItemInfo &info, const QString &url, QUndoCommand \
*command);  void abortAudioThumbs();
      /** @brief Abort all ongoing operations to prepare close. */
      void abortOperations();
diff --cc src/bin/projectclip.cpp
index 801bb4989,305a48b34..14d65ace6
--- a/src/bin/projectclip.cpp
+++ b/src/bin/projectclip.cpp
@@@ -89,11 -90,11 +89,11 @@@ ProjectClip::ProjectClip(const QDomElem
      QString clipName = getXmlProperty(description, \
QStringLiteral("kdenlive:clipname"));  if (!clipName.isEmpty()) {
          m_name = clipName;
-     } else if (m_temporaryUrl.isValid()) {
-         m_name = m_temporaryUrl.fileName();
 -    }
 -    else if (!m_temporaryUrl.isEmpty()) {
++    } else if (!m_temporaryUrl.isEmpty()) {
+         m_name = QFileInfo(m_temporaryUrl).fileName();
 +    } else {
 +        m_name = i18n("Untitled");
      }
 -    else m_name = i18n("Untitled");
      connect(this, &ProjectClip::updateJobStatus, this, &ProjectClip::setJobStatus);
      setParent(parent);
      connect(this, &ProjectClip::updateThumbProgress, bin(), \
&Bin::doUpdateThumbsProgress); @@@ -242,17 -238,13 +242,17 @@@ ProjectClip \
*ProjectClip::clipAt(int ix  
  bool ProjectClip::hasUrl() const
  {
 -    if (m_controller && (m_type != Color) && (m_type != Unknown)) return \
(!m_controller->clipUrl().isEmpty());  +    if (m_controller && (m_type != Color) && \
                (m_type != Unknown)) {
-         return (m_controller->clipUrl().isValid());
++        return (!m_controller->clipUrl().isEmpty());
 +    }
      return false;
  }
  
- QUrl ProjectClip::url() const
+ const QString ProjectClip::url() const
  {
 -    if (m_controller) return m_controller->clipUrl();
 +    if (m_controller) {
 +        return m_controller->clipUrl();
 +    }
      return m_temporaryUrl;
  }
  
@@@ -547,51 -534,45 +547,51 @@@ const QString ProjectClip::getFileHash(
      QByteArray fileData;
      QByteArray fileHash;
      switch (m_type) {
 -      case SlideShow:
 -          fileData = m_controller ? m_controller->clipUrl().toUtf8() : \
                m_temporaryUrl.toUtf8();
 -          fileHash = QCryptographicHash::hash(fileData, QCryptographicHash::Md5);
 -          break;
 -      case Text:
 -          fileData = m_controller ? \
                m_controller->property(QStringLiteral("xmldata")).toUtf8() : \
                name().toUtf8();
 -          fileHash = QCryptographicHash::hash(fileData, QCryptographicHash::Md5);
 -          break;
 -      case QText:
 -          fileData = m_controller ? \
                m_controller->property(QStringLiteral("text")).toUtf8() : \
                name().toUtf8();
 -          fileHash = QCryptographicHash::hash(fileData, QCryptographicHash::Md5);
 -          break;
 -      case Color:
 -          fileData = m_controller ? \
                m_controller->property(QStringLiteral("resource")).toUtf8() : \
                name().toUtf8();
 -          fileHash = QCryptographicHash::hash(fileData, QCryptographicHash::Md5);
 -          break;
 -      default:
 -          QFile file(m_controller ? m_controller->clipUrl() : m_temporaryUrl);
 -          if (file.open(QIODevice::ReadOnly)) { // write size and hash only if \
                resource points to a file
 -              /*
 -               * 1 MB = 1 second per 450 files (or faster)
 -               * 10 MB = 9 seconds per 450 files (or faster)
 -               */
 +    case SlideShow:
-         fileData = m_controller ? m_controller->clipUrl().toLocalFile().toUtf8() : \
m_temporaryUrl.toLocalFile().toUtf8(); ++        fileData = m_controller ? \
m_controller->clipUrl().toUtf8() : m_temporaryUrl.toUtf8();  +        fileHash = \
QCryptographicHash::hash(fileData, QCryptographicHash::Md5);  +        break;
 +    case Text:
 +        fileData = m_controller ? \
m_controller->property(QStringLiteral("xmldata")).toUtf8() : name().toUtf8();  +      \
fileHash = QCryptographicHash::hash(fileData, QCryptographicHash::Md5);  +        \
break;  +    case QText:
 +        fileData = m_controller ? \
m_controller->property(QStringLiteral("text")).toUtf8() : name().toUtf8();  +        \
fileHash = QCryptographicHash::hash(fileData, QCryptographicHash::Md5);  +        \
break;  +    case Color:
 +        fileData = m_controller ? \
m_controller->property(QStringLiteral("resource")).toUtf8() : name().toUtf8();  +     \
fileHash = QCryptographicHash::hash(fileData, QCryptographicHash::Md5);  +        \
break;  +    default:
-         QFile file(m_controller ? m_controller->clipUrl().toLocalFile() : \
m_temporaryUrl.toLocalFile()); ++        QFile file(m_controller ? \
m_controller->clipUrl() : m_temporaryUrl);  +        if \
(file.open(QIODevice::ReadOnly)) { // write size and hash only if resource points to \
a file  +            /*
 +             * 1 MB = 1 second per 450 files (or faster)
 +             * 10 MB = 9 seconds per 450 files (or faster)
 +             */
              if (file.size() > 2000000) {
                  fileData = file.read(1000000);
 -                if (file.seek(file.size() - 1000000))
 +                if (file.seek(file.size() - 1000000)) {
                      fileData.append(file.readAll());
 -            } else
 +                }
 +            } else {
                  fileData = file.readAll();
 +            }
              file.close();
 -            if (m_controller) \
m_controller->setProperty(QStringLiteral("kdenlive:file_size"), \
QString::number(file.size()));  +            if (m_controller) {
 +                m_controller->setProperty(QStringLiteral("kdenlive:file_size"), \
QString::number(file.size()));  +            }
              fileHash = QCryptographicHash::hash(fileData, QCryptographicHash::Md5);
 -          }
 -          break;
 +        }
 +        break;
 +    }
 +    if (fileHash.isEmpty()) {
 +        return QString();
      }
 -    if (fileHash.isEmpty()) return QString();
      QString result = fileHash.toHex();
      if (m_controller) {
 -	m_controller->setProperty(QStringLiteral("kdenlive:file_hash"), result);
 +        m_controller->setProperty(QStringLiteral("kdenlive:file_hash"), result);
      }
      return result;
  }
@@@ -651,15 -626,18 +651,15 @@@ void ProjectClip::setProperties(const Q
              // reset proxy
              if (bin()->hasPendingJob(m_id, AbstractClipJob::PROXYJOB)) {
                  bin()->discardJobs(m_id, AbstractClipJob::PROXYJOB);
 -            }
 -            else {
 +            } else {
                  reloadProducer();
              }
 -        }
 -        else {
 +        } else {
              // A proxy was requested, make sure to keep original url
-             setProducerProperty(QStringLiteral("kdenlive:originalurl"), \
url().toLocalFile()); +             \
setProducerProperty(QStringLiteral("kdenlive:originalurl"), url());  \
bin()->startJob(m_id, AbstractClipJob::PROXYJOB);  }
 -    }
 -    else if (properties.contains(QStringLiteral("resource")) || \
properties.contains(QStringLiteral("templatetext")) || \
properties.contains(QStringLiteral("autorotate"))) {  +    } else if \
(properties.contains(QStringLiteral("resource")) || \
properties.contains(QStringLiteral("templatetext")) || \
properties.contains(QStringLiteral("autorotate"))) {  // Clip resource changed, \
update thumbnail  if (m_type != Color) {
              reloadProducer();
@@@ -898,10 -857,8 +898,10 @@@ void ProjectClip::doExtractIntra(
          m_intraThumbMutex.lock();
          pos = m_intraThumbs.takeFirst();
          m_intraThumbMutex.unlock();
 -        if (pos >= max) pos = max - 1;
 +        if (pos >= max) {
 +            pos = max - 1;
 +        }
-         const QString path = url().toLocalFile() + '_' + QString::number(pos);
+         const QString path = url() + '_' + QString::number(pos);
          QImage img = bin()->findCachedPixmap(path);
          if (!img.isNull()) {
              // Cache already contains image
@@@ -952,10 -908,8 +952,10 @@@ void ProjectClip::doExtractImage(
              emit thumbReady(pos, QImage(thumbFolder.absoluteFilePath(hash() + '#' + \
QString::number(pos) + ".png")));  continue;
          }
 -        if (pos >= max) pos = max - 1;
 +        if (pos >= max) {
 +            pos = max - 1;
 +        }
-         const QString path = url().toLocalFile() + '_' + QString::number(pos);
+         const QString path = url() + '_' + QString::number(pos);
          QImage img = bin()->findCachedPixmap(path);
          if (!img.isNull()) {
              emit thumbReady(pos, img);
diff --cc src/doc/kdenlivedoc.cpp
index 370410562,c7df9b39f..f4931191d
--- a/src/doc/kdenlivedoc.cpp
+++ b/src/doc/kdenlivedoc.cpp
@@@ -1384,10 -1337,12 +1384,10 @@@ void KdenliveDoc::slotProxyCurrentItem(
      }
  }
  
 -
  //TODO put all file watching stuff in own class
- void KdenliveDoc::watchFile(const QUrl &url)
+ void KdenliveDoc::watchFile(const QString &url)
  {
-     m_fileWatcher.addFile(url.toLocalFile());
+     m_fileWatcher.addFile(url);
  }
  
  void KdenliveDoc::slotClipModified(const QString &path)
@@@ -1399,15 -1354,14 +1399,15 @@@
          }
          m_modifiedClips[id] = QTime::currentTime();
      }
 -    if (!m_modifiedTimer.isActive()) m_modifiedTimer.start();
 +    if (!m_modifiedTimer.isActive()) {
 +        m_modifiedTimer.start();
 +    }
  }
  
 -
  void KdenliveDoc::slotClipMissing(const QString &path)
  {
 -    qDebug() << "// CLIP: " << path << " WAS MISSING";
 +    qCDebug(KDENLIVE_LOG) << "// CLIP: " << path << " WAS MISSING";
-     QStringList ids = \
pCore->binController()->getBinIdsByResource(QUrl::fromLocalFile(path)); +     \
                QStringList ids = \
                pCore->binController()->getBinIdsByResource(QFileInfo(path));
      //TODO handle missing clips by replacing producer with an invalid producer
      /*foreach (const QString &id, ids) {
          emit missingClip(id);
diff --cc src/doc/kdenlivedoc.h
index ab75af043,3bc5ad8fd..d04c3cc5a
--- a/src/doc/kdenlivedoc.h
+++ b/src/doc/kdenlivedoc.h
@@@ -144,9 -143,9 +144,9 @@@ public
      /** @brief Get frame size of the renderer (profile)*/
      const QSize getRenderSize() const;
      /** @brief Add url to the file watcher so that we monitor changes */
-     void watchFile(const QUrl &url);
+     void watchFile(const QString &url);
      /** @brief Get all document properties that need to be saved */
 -    QMap <QString, QString> documentProperties();
 +    QMap<QString, QString> documentProperties();
      bool useProxy() const;
      bool autoGenerateProxy(int width) const;
      bool autoGenerateImageProxy(int width) const;
diff --cc src/doc/kthumb.cpp
index 111d1bb47,64728c9cc..d1f76d676
--- a/src/doc/kthumb.cpp
+++ b/src/doc/kthumb.cpp
@@@ -44,10 -42,8 +44,10 @@@ QPixmap KThumb::getImage(const QUrl &ur
          height = width * profile.height() / profile.width();
      }
      QPixmap pix(width, height);
 -    if (!url.isValid()) return pix;
 +    if (!url.isValid()) {
 +        return pix;
 +    }
-     Mlt::Producer *producer = new Mlt::Producer(profile, \
url.path().toUtf8().constData()); +     Mlt::Producer *producer = new \
Mlt::Producer(profile, url.toLocalFile().toUtf8().constData());  pix = \
QPixmap::fromImage(getFrame(producer, frame, width, height));  delete producer;
      return pix;
diff --cc src/dvdwizard/dvdwizard.cpp
index 65ab1f69c,5a6618276..afe821583
--- a/src/dvdwizard/dvdwizard.cpp
+++ b/src/dvdwizard/dvdwizard.cpp
@@@ -181,13 -182,11 +181,13 @@@ void DvdWizard::slotPageChanged(int pag
  void DvdWizard::generateDvd()
  {
      m_isoMessage->animatedHide();
-     QDir dir(m_status.tmp_folder->url().path() + "DVD/");
+     QDir dir(m_status.tmp_folder->url().toLocalFile() + "DVD/");
 -    if (!dir.exists()) dir.mkpath(dir.absolutePath());
 +    if (!dir.exists()) {
 +        dir.mkpath(dir.absolutePath());
 +    }
      if (!dir.exists()) {
          // We failed creating tmp DVD directory
-         KMessageBox::sorry(this, i18n("Cannot create temporary directory %1", \
m_status.tmp_folder->url().path() + "DVD")); +         KMessageBox::sorry(this, \
i18n("Cannot create temporary directory %1", m_status.tmp_folder->url().toLocalFile() \
+ "DVD"));  return;
      }
  
@@@ -766,10 -731,10 +766,10 @@@ void DvdWizard::slotRenderFinished(int 
      m_creationLog.append(m_dvdauthor->readAllStandardError());
      m_dvdauthor->close();
      delete m_dvdauthor;
 -    m_dvdauthor = NULL;
 +    m_dvdauthor = Q_NULLPTR;
  
      // Check if DVD structure has the necessary info
-     if (!QFile::exists(m_status.tmp_folder->url().path() + \
"/DVD/VIDEO_TS/VIDEO_TS.IFO")) { +     if \
(!QFile::exists(m_status.tmp_folder->url().toLocalFile() + \
"/DVD/VIDEO_TS/VIDEO_TS.IFO")) {  errorMessage(i18n("DVD structure broken"));
          m_status.error_log->append(m_creationLog + "<a name=\"result\" /><br \
/><strong>" + i18n("DVD structure broken"));  \
m_status.error_log->scrollToAnchor(QStringLiteral("result")); @@@ -865,12 -827,12 \
+865,12 @@@ void DvdWizard::slotIsoFinished(int exi  }
  
      isoitem->setIcon(QIcon::fromTheme(QStringLiteral("dialog-ok")));
-     //qCDebug(KDENLIVE_LOG) << "ISO IMAGE " << m_status.iso_image->url().path() << \
                " Successfully created";
 -    //qDebug() << "ISO IMAGE " << m_status.iso_image->url().toLocalFile() << " \
Successfully created"; ++    //qCDebug(KDENLIVE_LOG) << "ISO IMAGE " << \
m_status.iso_image->url().toLocalFile() << " Successfully created";  cleanup();
 -    //qDebug() << m_creationLog;
 +    //qCDebug(KDENLIVE_LOG) << m_creationLog;
-     infoMessage(i18n("DVD ISO image %1 successfully created.", \
m_status.iso_image->url().path())); +     infoMessage(i18n("DVD ISO image %1 \
successfully created.", m_status.iso_image->url().toLocalFile()));  
-     m_status.error_log->append("<a name=\"result\" /><strong>" + i18n("DVD ISO \
image %1 successfully created.", m_status.iso_image->url().path()) + "</strong>"); +  \
m_status.error_log->append("<a name=\"result\" /><strong>" + i18n("DVD ISO image %1 \
successfully created.", m_status.iso_image->url().toLocalFile()) + "</strong>");  \
m_status.error_log->scrollToAnchor(QStringLiteral("result"));  \
m_status.button_preview->setEnabled(true);  m_status.button_burn->setEnabled(true);
@@@ -879,15 -841,15 +879,15 @@@
  
  }
  
 -
  void DvdWizard::cleanup()
  {
-     QDir dir(m_status.tmp_folder->url().path() + QDir::separator() + "DVD");
+     QDir dir(m_status.tmp_folder->url().toLocalFile() + QDir::separator() + "DVD");
      // Try to make sure we delete the correct directory
 -    if (dir.exists() && dir.dirName() == QLatin1String("DVD")) \
dir.removeRecursively();  +    if (dir.exists() && dir.dirName() == \
QLatin1String("DVD")) {  +        dir.removeRecursively();
 +    }
  }
  
 -
  void DvdWizard::slotPreview()
  {
      QStringList programNames;
@@@ -901,9 -863,8 +901,9 @@@
      }
      if (exec.isEmpty()) {
          KMessageBox::sorry(this, i18n("Previewing requires one of these \
applications (%1)", programNames.join(",")));  +    } else {
-         QProcess::startDetached(exec, QStringList() << "dvd://" + \
m_status.iso_image->url().path()); ++        QProcess::startDetached(exec, \
QStringList() << "dvd://" + m_status.iso_image->url().toLocalFile());  }
 -    else QProcess::startDetached(exec, QStringList() << "dvd://" + \
m_status.iso_image->url().toLocalFile());  }
  
  void DvdWizard::slotBurn()
@@@ -911,30 -872,23 +911,30 @@@
      QAction *action = qobject_cast<QAction *>(sender());
      QString exec = action->data().toString();
      QStringList args;
 -    if (exec.endsWith(QLatin1String("k3b"))) args << QStringLiteral("--image") << \
                m_status.iso_image->url().toLocalFile();
 -    else args << "--image=" + m_status.iso_image->url().toLocalFile();
 +    if (exec.endsWith(QLatin1String("k3b"))) {
-         args << QStringLiteral("--image") << m_status.iso_image->url().path();
++        args << QStringLiteral("--image") << \
m_status.iso_image->url().toLocalFile();  +    } else {
-         args << "--image=" + m_status.iso_image->url().path();
++        args << "--image=" + m_status.iso_image->url().toLocalFile();
 +    }
      QProcess::startDetached(exec, args);
  }
  
  void DvdWizard::slotGenerate()
  {
      // clear job icons
 -    if ((m_dvdauthor && m_dvdauthor->state() != QProcess::NotRunning) || (m_mkiso \
                && m_mkiso->state() != QProcess::NotRunning)) return;
 -    for (int i = 0; i < m_status.job_progress->count(); ++i)
 +    if ((m_dvdauthor && m_dvdauthor->state() != QProcess::NotRunning) || (m_mkiso \
&& m_mkiso->state() != QProcess::NotRunning)) {  +        return;
 +    }
 +    for (int i = 0; i < m_status.job_progress->count(); ++i) {
          m_status.job_progress->item(i)->setIcon(QIcon());
 +    }
      QString warnMessage;
-     if (QFile::exists(m_status.tmp_folder->url().path() + "DVD")) {
-         warnMessage.append(i18n("Folder %1 already exists. Overwrite?\n", \
                m_status.tmp_folder->url().path() + "DVD"));
 -    if (QFile::exists(m_status.tmp_folder->url().toLocalFile() + "DVD"))
++    if (QFile::exists(m_status.tmp_folder->url().toLocalFile() + "DVD")) {
+         warnMessage.append(i18n("Folder %1 already exists. Overwrite?\n", \
                m_status.tmp_folder->url().toLocalFile() + "DVD"));
 -    if (QFile::exists(m_status.iso_image->url().toLocalFile()))
 +    }
-     if (QFile::exists(m_status.iso_image->url().path())) {
-         warnMessage.append(i18n("Image file %1 already exists. Overwrite?", \
m_status.iso_image->url().path())); ++    if \
(QFile::exists(m_status.iso_image->url().toLocalFile())) { +         \
warnMessage.append(i18n("Image file %1 already exists. Overwrite?", \
m_status.iso_image->url().toLocalFile()));  +    }
  
      if (warnMessage.isEmpty() || KMessageBox::questionYesNo(this, warnMessage) == \
KMessageBox::Yes) {  cleanup();
@@@ -958,18 -909,14 +958,18 @@@ void DvdWizard::slotAbort(
  
  void DvdWizard::slotSave()
  {
 -    QString projectFolder = KRecentDirs::dir(":KdenliveDvdFolder");
 -    if (projectFolder.isEmpty()) projectFolder = QDir::homePath();
 +    QString projectFolder = KRecentDirs::dir(QStringLiteral(":KdenliveDvdFolder"));
 +    if (projectFolder.isEmpty()) {
 +        projectFolder = QDir::homePath();
 +    }
      QUrl url = QFileDialog::getSaveFileUrl(this, i18n("Save DVD Project"), \
                QUrl::fromLocalFile(projectFolder), i18n("DVD project (*.kdvd)"));
 -    if (!url.isValid())
 +    if (!url.isValid()) {
          return;
 -    KRecentDirs::add(":KdenliveDvdFolder", \
                url.adjusted(QUrl::RemoveFilename).toLocalFile());
 -    if (currentId() == 0)
 +    }
-     KRecentDirs::add(QStringLiteral(":KdenliveDvdFolder"), \
url.adjusted(QUrl::RemoveFilename).path()); ++    \
KRecentDirs::add(QStringLiteral(":KdenliveDvdFolder"), \
url.adjusted(QUrl::RemoveFilename).toLocalFile());  +    if (currentId() == 0) {
          m_pageChapters->setVobFiles(m_pageVob->dvdFormat(), \
m_pageVob->selectedUrls(), m_pageVob->durations(), m_pageVob->chapters());  +    }
  
      QDomDocument doc;
      QDomElement dvdproject = doc.createElement(QStringLiteral("dvdproject"));
@@@ -980,18 -927,14 +980,18 @@@
  
      doc.appendChild(dvdproject);
      QDomElement menu = m_pageMenu->toXml();
 -    if (!menu.isNull()) dvdproject.appendChild(doc.importNode(menu, true));
 +    if (!menu.isNull()) {
 +        dvdproject.appendChild(doc.importNode(menu, true));
 +    }
      QDomElement chaps = m_pageChapters->toXml();
 -    if (!chaps.isNull()) dvdproject.appendChild(doc.importNode(chaps, true));
 +    if (!chaps.isNull()) {
 +        dvdproject.appendChild(doc.importNode(chaps, true));
 +    }
  
-     QFile file(url.path());
+     QFile file(url.toLocalFile());
      if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
-         qCWarning(KDENLIVE_LOG) << "//////  ERROR writing to file: " << url.path();
-         KMessageBox::error(this, i18n("Cannot write to file %1", url.path()));
 -        qWarning() << "//////  ERROR writing to file: " << url.toLocalFile();
++        qCWarning(KDENLIVE_LOG) << "//////  ERROR writing to file: " << \
url.toLocalFile(); +         KMessageBox::error(this, i18n("Cannot write to file %1", \
url.toLocalFile()));  return;
      }
  
@@@ -1002,19 -945,17 +1002,19 @@@
      file.close();
  }
  
 -
  void DvdWizard::slotLoad()
  {
 -    QString projectFolder = KRecentDirs::dir(":KdenliveDvdFolder");
 -    if (projectFolder.isEmpty()) projectFolder = QDir::homePath();
 +    QString projectFolder = KRecentDirs::dir(QStringLiteral(":KdenliveDvdFolder"));
 +    if (projectFolder.isEmpty()) {
 +        projectFolder = QDir::homePath();
 +    }
      const QUrl url = QFileDialog::getOpenFileUrl(this, QString(), \
                QUrl::fromLocalFile(projectFolder), i18n("DVD project (*.kdvd)"));
 -    if (!url.isValid())
 +    if (!url.isValid()) {
          return;
 -    KRecentDirs::add(":KdenliveDvdFolder", \
url.adjusted(QUrl::RemoveFilename).toLocalFile());  +    }
-     KRecentDirs::add(QStringLiteral(":KdenliveDvdFolder"), \
url.adjusted(QUrl::RemoveFilename).path()); ++    \
KRecentDirs::add(QStringLiteral(":KdenliveDvdFolder"), \
url.adjusted(QUrl::RemoveFilename).toLocalFile());  QDomDocument doc;
-     QFile file(url.path());
+     QFile file(url.toLocalFile());
      doc.setContent(&file, false);
      file.close();
      QDomElement dvdproject = doc.documentElement();
diff --cc src/dvdwizard/dvdwizardmenu.cpp
index ed40084fd,251927666..821478db4
--- a/src/dvdwizard/dvdwizardmenu.cpp
+++ b/src/dvdwizard/dvdwizardmenu.cpp
@@@ -500,10 -471,8 +500,10 @@@ void DvdWizardMenu::buildImage(
  
      if (m_view.background_list->currentIndex() == 1) {
          // image background
-         if (!pix.load(m_view.background_image->url().path())) {
+         if (!pix.load(m_view.background_image->url().toLocalFile())) {
 -            if (m_background->scene() != 0) m_scene->removeItem(m_background);
 +            if (m_background->scene() != 0) {
 +                m_scene->removeItem(m_background);
 +            }
              return;
          }
          pix = pix.scaled(m_width, m_height);
diff --cc src/dvdwizard/dvdwizardvob.cpp
index d3310393f,e41f2bc2f..0feb109a1
--- a/src/dvdwizard/dvdwizardvob.cpp
+++ b/src/dvdwizard/dvdwizardvob.cpp
@@@ -267,22 -260,20 +267,22 @@@ void DvdWizardVob::slotAddVobList(QList
          QString dialogFilter = i18n("All Supported Files") + " (" + allExtensions + \
");; " + i18n("MPEG Files") + " (*.mpeg *.mpg *.vob);; " + i18n("All Files") + " \
(*.*)";  list = QFileDialog::getOpenFileUrls(this, i18n("Add new video file"), \
QUrl::fromLocalFile(KRecentDirs::dir(QStringLiteral(":KdenliveDvdFolder"))), \
dialogFilter);  if (!list.isEmpty()) {
-             KRecentDirs::add(QStringLiteral(":KdenliveDvdFolder"), \
list.at(0).adjusted(QUrl::RemoveFilename).path()); +             \
KRecentDirs::add(QStringLiteral(":KdenliveDvdFolder"), \
list.at(0).adjusted(QUrl::RemoveFilename).toLocalFile());  }
      }
 -    foreach(const QUrl &url, list) {
 +    foreach (const QUrl &url, list) {
          slotAddVobFile(url, QString(), false);
      }
      slotCheckVobList();
      slotCheckProfiles();
  }
  
 -void DvdWizardVob::slotAddVobFile(QUrl url, const QString &chapters, bool \
checkFormats)  +void DvdWizardVob::slotAddVobFile(const QUrl &url, const QString \
&chapters, bool checkFormats)  {
 -    if (!url.isValid()) return;
 +    if (!url.isValid()) {
 +        return;
 +    }
-     QFile f(url.path());
+     QFile f(url.toLocalFile());
      qint64 fileSize = f.size();
  
      Mlt::Profile profile;
@@@ -369,9 -352,10 +369,9 @@@
  
      if (chapters.isEmpty() == false) {
          item->setData(1, Qt::UserRole + 1, chapters);
-     } else if (QFile::exists(url.path() + ".dvdchapter")) {
 -    }
 -    else if (QFile::exists(url.toLocalFile() + ".dvdchapter")) {
++    } else if (QFile::exists(url.toLocalFile() + ".dvdchapter")) {
          // insert chapters as children
-         QFile file(url.path() + ".dvdchapter");
+         QFile file(url.toLocalFile() + ".dvdchapter");
          if (file.open(QIODevice::ReadOnly)) {
              QDomDocument doc;
              if (doc.setContent(&file) == false) {
diff --cc src/effectstack/effectstackview2.cpp
index f87e645ae,b2c0f066c..22ddfcf7e
--- a/src/effectstack/effectstackview2.cpp
+++ b/src/effectstack/effectstackview2.cpp
@@@ -975,10 -944,11 +975,10 @@@ void EffectStackView2::slotCreateRegion
      QDomElement region = \
MainWindow::videoEffects.getEffectByTag(QStringLiteral("region"), \
                QStringLiteral("region")).cloneNode().toElement();
      region.appendChild(region.ownerDocument().importNode(neweffect, true));
      region.setAttribute(QStringLiteral("kdenlive_ix"), ix);
-     EffectsList::setParameter(region, QStringLiteral("resource"), url.path());
+     EffectsList::setParameter(region, QStringLiteral("resource"), \
url.toLocalFile());  if (m_status == TIMELINE_TRACK) {
 -        emit updateEffect(NULL, m_trackindex, oldeffect, region, ix,false);
 -    }
 -    else if (m_status == TIMELINE_CLIP && m_clipref) {
 +        emit updateEffect(Q_NULLPTR, m_trackindex, oldeffect, region, ix, false);
 +    } else if (m_status == TIMELINE_CLIP && m_clipref) {
          emit updateEffect(m_clipref, -1, oldeffect, region, ix, false);
          // Make sure the changed effect is currently displayed
          //slotSetCurrentEffect(ix);
diff --cc src/effectstack/parametercontainer.cpp
index 66d434173,c2366aa52..88c69d704
--- a/src/effectstack/parametercontainer.cpp
+++ b/src/effectstack/parametercontainer.cpp
@@@ -1184,16 -1125,14 +1184,16 @@@ void ParameterContainer::slotCollectAll
  
              if (m_keyframeEditor->isVisibleParam(realName)) {
                  pa.setAttribute(QStringLiteral("intimeline"), QStringLiteral("1"));
 -	    }
 -            else if (pa.hasAttribute(QStringLiteral("intimeline")))
 +            } else if (pa.hasAttribute(QStringLiteral("intimeline"))) {
                  pa.setAttribute(QStringLiteral("intimeline"), QStringLiteral("0"));
 +            }
          } else if (type == QLatin1String("url")) {
 -            KUrlRequester *req = \
                static_cast<Urlval*>(m_valueItems.value(paramName))->urlwidget;
 -            if (req) setValue = req->url().toLocalFile();
 +            KUrlRequester *req = static_cast<Urlval \
*>(m_valueItems.value(paramName))->urlwidget;  +            if (req) {
-                 setValue = req->url().path();
++                setValue = req->url().toLocalFile();
 +            }
          } else if (type == QLatin1String("keywords")) {
 -            Keywordval* val = \
static_cast<Keywordval*>(m_valueItems.value(paramName));  +            Keywordval \
*val = static_cast<Keywordval *>(m_valueItems.value(paramName));  if (val) {
                  QLineEdit *line = val->lineeditwidget;
                  KComboBox *combo = val->comboboxwidget;
diff --cc src/library/librarywidget.cpp
index 572cca79d,8f2b3a609..8c81ab348
--- a/src/library/librarywidget.cpp
+++ b/src/library/librarywidget.cpp
@@@ -407,18 -403,16 +407,18 @@@ void LibraryWidget::slotMoveData(const 
          dest = m_directory.absolutePath();
      }
      QDir dir(dest);
 -    if (!dir.exists()) return;
 -    foreach(const QUrl &url, urls) {
 +    if (!dir.exists()) {
 +        return;
 +    }
 +    foreach (const QUrl &url, urls) {
-         if (!url.path().startsWith(m_directory.absolutePath())) {
+         if (!url.toLocalFile().startsWith(m_directory.absolutePath())) {
              // Dropped an external file, attempt to copy it to library
              KIO::FileCopyJob *copyJob = KIO::file_copy(url, \
                QUrl::fromLocalFile(dir.absoluteFilePath(url.fileName())));
 -            connect(copyJob, SIGNAL(result(KJob *)), this, \
                SLOT(slotDownloadFinished(KJob *)));
 -            connect(copyJob, SIGNAL(percent(KJob *, unsigned long)), this, \
SLOT(slotDownloadProgress(KJob *, unsigned long)));  +            connect(copyJob, \
&KJob::result, this, &LibraryWidget::slotDownloadFinished);  +            \
connect(copyJob, SIGNAL(percent(KJob *, ulong)), this, SLOT(slotDownloadProgress(KJob \
*, ulong)));  } else {
              // Internal drag/drop
-             dir.rename(url.path(), url.fileName());
+             dir.rename(url.toLocalFile(), url.fileName());
          }
      }
  }
@@@ -528,13 -516,13 +528,13 @@@ void LibraryWidget::slotItemsDeleted(co
          QUrl fileUrl = fitem.url();
          QString path;
          if (fitem.isDir()) {
-             path = fileUrl.path();
+             path = fileUrl.toLocalFile();
          } else {
-             path = fileUrl.adjusted(QUrl::RemoveFilename | \
QUrl::StripTrailingSlash).path(); +             path = \
fileUrl.adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash).toLocalFile();  }
 -        QTreeWidgetItem *matchingFolder = NULL;
 +        QTreeWidgetItem *matchingFolder = Q_NULLPTR;
-         if (path != m_directory.path()) {
+         if (path != m_directory.absolutePath()) {
 -            foreach(QTreeWidgetItem *folder, m_folders) {
 +            foreach (QTreeWidgetItem *folder, m_folders) {
                  if (folder->data(0, Qt::UserRole).toString() == path) {
                      // Found parent folder
                      matchingFolder = folder;
@@@ -558,12 -546,12 +558,12 @@@
                  delete matchingFolder;
              }
          } else {
 -            if (matchingFolder == NULL) {
 +            if (matchingFolder == Q_NULLPTR) {
                  matchingFolder = m_libraryTree->invisibleRootItem();
              }
 -            for(int i = 0; i < matchingFolder->childCount(); i++) {
 +            for (int i = 0; i < matchingFolder->childCount(); i++) {
                  QTreeWidgetItem *item = matchingFolder->child(i);
-                 if (item->data(0, Qt::UserRole).toString() == fileUrl.path()) {
+                 if (item->data(0, Qt::UserRole).toString() == \
fileUrl.toLocalFile()) {  // Found deleted item
                      delete item;
                      break;
@@@ -582,11 -571,11 +582,11 @@@ void LibraryWidget::slotItemsAdded(cons
          QUrl fileUrl = fitem.url();
          QString name = fileUrl.fileName();
          QTreeWidgetItem *treeItem;
 -        QTreeWidgetItem *parent = NULL;
 +        QTreeWidgetItem *parent = Q_NULLPTR;
-         if (url != QUrl::fromLocalFile(m_directory.path())) {
+         if (url != QUrl::fromLocalFile(m_directory.absolutePath())) {
              // not a top level item
-             QString directory = fileUrl.adjusted(QUrl::RemoveFilename | \
QUrl::StripTrailingSlash).path(); +             QString directory = \
                fileUrl.adjusted(QUrl::RemoveFilename | \
                QUrl::StripTrailingSlash).toLocalFile();
 -            foreach(QTreeWidgetItem *folder, m_folders) {
 +            foreach (QTreeWidgetItem *folder, m_folders) {
                  if (folder->data(0, Qt::UserRole).toString() == directory) {
                      // Found parent folder
                      parent = folder;
diff --cc src/mainwindow.cpp
index 536bd128d,d16df70dd..942497498
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@@ -839,9 -814,9 +839,9 @@@ void MainWindow::saveProperties(KConfig
      KXmlGuiWindow::saveProperties(config);
      //TODO: fix session management
      if (qApp->isSavingSession() && pCore->projectManager()) {
 -	if (pCore->projectManager()->current() && \
                !pCore->projectManager()->current()->url().isEmpty()) {
 -	    config.writeEntry("kdenlive_lastUrl", \
                pCore->projectManager()->current()->url().toLocalFile());
 -	}
 +        if (pCore->projectManager()->current() && \
                !pCore->projectManager()->current()->url().isEmpty()) {
-             config.writeEntry("kdenlive_lastUrl", \
pCore->projectManager()->current()->url().path()); ++            \
config.writeEntry("kdenlive_lastUrl", \
pCore->projectManager()->current()->url().toLocalFile());  +        }
      }
  }
  
diff --cc src/mltcontroller/bincontroller.h
index f8e703f39,9cc758231..46b3ee9ec
--- a/src/mltcontroller/bincontroller.h
+++ b/src/mltcontroller/bincontroller.h
@@@ -133,10 -133,10 +133,10 @@@ public
      void replaceBinPlaylistClip(const QString &id, Mlt::Producer &producer);
  
      /** @brief Get the list of ids whose clip have the resource indicated by @param \
                url */
-     const QStringList getBinIdsByResource(const QUrl &url) const;
+     const QStringList getBinIdsByResource(const QFileInfo &url) const;
      void replaceProducer(const QString &id, Mlt::Producer &producer);
      void storeMarker(const QString &markerId, const QString &markerHash);
 -    QMap<double,QString> takeGuidesData();
 +    QMap<double, QString> takeGuidesData();
  
      /** @brief A Bin clip effect was changed, update track producers */
      void updateTrackProducer(const QString &id);
diff --cc src/mltcontroller/clipcontroller.cpp
index 598cbb040,730d038b7..e46cb0d9b
--- a/src/mltcontroller/clipcontroller.cpp
+++ b/src/mltcontroller/clipcontroller.cpp
@@@ -27,8 -27,7 +27,7 @@@ along with this program.  If not, see <
  #include "timeline/timeline.h"
  #include "timeline/effectmanager.h"
  
- #include <QUrl>
 -#include <QDebug>
 +#include "kdenlive_debug.h"
  #include <QPixmap>
  #include <QFileInfo>
  #include <KLocalizedString>
@@@ -49,22 -48,26 +48,23 @@@ ClipController::ClipController(BinContr
  {
      m_masterProducer = &producer;
      if (!m_masterProducer->is_valid()) {
 -        qDebug()<<"// WARNING, USING INVALID PRODUCER";
 +        qCDebug(KDENLIVE_LOG) << "// WARNING, USING INVALID PRODUCER";
          return;
 -    }
 -    else {
 +    } else {
+         m_service = m_properties->get("mlt_service");
          QString proxy = m_properties->get("kdenlive:proxy");
+         QString path = m_properties->get("resource");
          if (proxy.length() > 2) {
              // This is a proxy producer, read original url from kdenlive property
-             QString path = m_properties->get("kdenlive:originalurl");
+             path = m_properties->get("kdenlive:originalurl");
              if (QFileInfo(path).isRelative()) {
                  path.prepend(bincontroller->documentRoot());
              }
-             m_url = QUrl::fromLocalFile(path);
              m_usesProxy = true;
-         } else {
-             m_url = QUrl::fromLocalFile(m_properties->get("resource"));
 -        }
 -        else if (m_service != QLatin1String("color") && m_service != \
QLatin1String("colour") && QFileInfo(path).isRelative()) { ++        } else if \
(m_service != QLatin1String("color") && m_service != QLatin1String("colour") && \
QFileInfo(path).isRelative()) { +             \
path.prepend(bincontroller->documentRoot());  }
-         m_service = m_properties->get("mlt_service");
+         m_path = QFileInfo(path).absoluteFilePath();
 -        qDebug()<<"* * *CREATED PROD: "<<path<<" = "<<m_path;
          getInfoForProducer();
      }
  }
@@@ -106,19 -109,25 +106,24 @@@ void ClipController::addMasterProducer(
  {
      m_properties = new Mlt::Properties(producer.get_properties());
      m_masterProducer = &producer;
 -    if (!m_masterProducer->is_valid()) qDebug()<<"// WARNING, USING INVALID \
                PRODUCER";
 -    else {
 +    if (!m_masterProducer->is_valid()) {
 +        qCDebug(KDENLIVE_LOG) << "// WARNING, USING INVALID PRODUCER";
 +    } else {
          QString proxy = m_properties->get("kdenlive:proxy");
+         m_service = m_properties->get("mlt_service");
+         QString path = m_properties->get("resource");
+         m_usesProxy = false;
          if (proxy.length() > 2) {
              // This is a proxy producer, read original url from kdenlive property
-             m_url = QUrl::fromLocalFile(m_properties->get("kdenlive:originalurl"));
+             path = m_properties->get("kdenlive:originalurl");
+             if (QFileInfo(path).isRelative()) {
+                 path.prepend(m_binController->documentRoot());
+             }
              m_usesProxy = true;
-         } else {
-             m_url = QUrl::fromLocalFile(m_properties->get("resource"));
-             m_usesProxy = false;
 -        }
 -        else if (m_service != QLatin1String("color") && m_service != \
QLatin1String("colour") && QFileInfo(path).isRelative()) { ++        } else if \
(m_service != QLatin1String("color") && m_service != QLatin1String("colour") && \
QFileInfo(path).isRelative()) { +             \
path.prepend(m_binController->documentRoot());  }
-         m_service = m_properties->get("mlt_service");
+         m_path = QFileInfo(path).absoluteFilePath();
 -        qDebug()<<"* * *LODED PROD: "<<path<<" = "<<m_path;
          getInfoForProducer();
      }
  }
@@@ -146,23 -154,29 +151,23 @@@ void ClipController::getInfoForProducer
          m_videoIndex = int_property(QStringLiteral("video_index"));
          if (m_audioIndex == -1) {
              m_clipType = Video;
 -        }
 -        else if (m_videoIndex == -1) {
 +        } else if (m_videoIndex == -1) {
              m_clipType = Audio;
 -        }
 -        else {
 +        } else {
              m_clipType = AV;
          }
 -    }
 -    else if (m_service == QLatin1String("qimage") || m_service == \
QLatin1String("pixbuf")) {  +    } else if (m_service == QLatin1String("qimage") || \
                m_service == QLatin1String("pixbuf")) {
-         if (m_url.path().contains(QStringLiteral("%")) || \
m_url.path().contains(QStringLiteral("/.all."))) { +         if \
(m_path.contains(QStringLiteral("%")) || m_path.contains(QStringLiteral("/.all."))) { \
                m_clipType = SlideShow;
 -        }
 -        else {
 +        } else {
              m_clipType = Image;
          }
          m_hasLimitedDuration = false;
 -    }
 -    else if (m_service == QLatin1String("colour") || m_service == \
QLatin1String("color")) {  +    } else if (m_service == QLatin1String("colour") || \
m_service == QLatin1String("color")) {  m_clipType = Color;
          m_hasLimitedDuration = false;
 -    }
 -    else if (m_service == QLatin1String("kdenlivetitle")) {
 +    } else if (m_service == QLatin1String("kdenlivetitle")) {
-         if (!m_url.isEmpty()) {
+         if (!m_path.isEmpty()) {
              m_clipType = TextTemplate;
          } else {
              m_clipType = Text;
@@@ -408,10 -401,8 +413,10 @@@ const QString ClipController::clipUrl(
  QString ClipController::clipName() const
  {
      QString name = property(QStringLiteral("kdenlive:clipname"));
 -    if (!name.isEmpty()) return name;
 -    return QFile(m_path).fileName();
 +    if (!name.isEmpty()) {
 +        return name;
 +    }
-     return m_url.fileName();
++    return QFileInfo(m_path).fileName();
  }
  
  QString ClipController::description() const
diff --cc src/mltcontroller/clippropertiescontroller.cpp
index 807133e0d,9d710c88d..f1c266883
--- a/src/mltcontroller/clippropertiescontroller.cpp
+++ b/src/mltcontroller/clippropertiescontroller.cpp
@@@ -752,9 -745,9 +752,9 @@@ void ClipPropertiesController::fillProp
      QMimeDatabase mimeDatabase;
      QMimeType mimeType;
  
-     mimeType = mimeDatabase.mimeTypeForFile(m_controller->clipUrl().toLocalFile());
+     mimeType = mimeDatabase.mimeTypeForFile(m_controller->clipUrl());
 -    foreach(KFileMetaData::Extractor* plugin, \
metaDataCollection.fetchExtractors(mimeType.name())) {  +    foreach \
(KFileMetaData::Extractor *plugin, \
                metaDataCollection.fetchExtractors(mimeType.name())) {
-         ExtractionResult extractionResult(m_controller->clipUrl().toLocalFile(), \
mimeType.name(), m_propertiesTree); +         ExtractionResult \
extractionResult(m_controller->clipUrl(), mimeType.name(), m_propertiesTree);  \
plugin->extract(&extractionResult);  }
  #endif
@@@ -952,17 -942,18 +952,17 @@@ void ClipPropertiesController::slotFill
      }
      int exifUsed = m_controller->int_property(QStringLiteral("kdenlive:exiftool"));
      if (exifUsed == 1) {
 -          Mlt::Properties subProperties;
 -          subProperties.pass_values(m_properties, "kdenlive:meta.exiftool.");
 -          if (subProperties.count() > 0) {
 -              QTreeWidgetItem *exif = new QTreeWidgetItem(tree, QStringList() << \
                i18n("Exif") << QString());
 -              exif->setExpanded(true);
 -              for (int i = 0; i < subProperties.count(); i++) {
 -                  new QTreeWidgetItem(exif, QStringList() << \
                subProperties.get_name(i) << subProperties.get(i));
 -              }
 -          }
 -    }
 -    else if (KdenliveSettings::use_exiftool()) {
 +        Mlt::Properties subProperties;
 +        subProperties.pass_values(m_properties, "kdenlive:meta.exiftool.");
 +        if (subProperties.count() > 0) {
 +            QTreeWidgetItem *exif = new QTreeWidgetItem(tree, QStringList() << \
i18n("Exif") << QString());  +            exif->setExpanded(true);
 +            for (int i = 0; i < subProperties.count(); i++) {
 +                new QTreeWidgetItem(exif, QStringList() << \
subProperties.get_name(i) << subProperties.get(i));  +            }
 +        }
 +    } else if (KdenliveSettings::use_exiftool()) {
-         QString url = m_controller->clipUrl().path();
+         QString url = m_controller->clipUrl();
          //Check for Canon THM file
          url = url.section('.', 0, -2) + ".THM";
          if (QFile::exists(url)) {
@@@ -1041,8 -1024,9 +1041,8 @@@
              }
              new QTreeWidgetItem(magicL, QStringList() << subProperties.get_name(i) \
<< subProperties.get(i));  }
 -    }
 -    else if (m_type != Image && KdenliveSettings::use_magicLantern()) {
 +    } else if (m_type != Image && KdenliveSettings::use_magicLantern()) {
-         QString url = m_controller->clipUrl().path();
+         QString url = m_controller->clipUrl();
          url = url.section('.', 0, -2) + ".LOG";
          if (QFile::exists(url)) {
              QFile file(url);
@@@ -1100,10 -1078,9 +1100,10 @@@ void ClipPropertiesController::slotDele
  
  void ClipPropertiesController::slotSaveAnalysis()
  {
-     const QString url = QFileDialog::getSaveFileName(this, i18n("Save Analysis \
Data"), m_controller->clipUrl().adjusted(QUrl::RemoveFilename).path(), i18n("Text \
File (*.txt)")); +     const QString url = QFileDialog::getSaveFileName(this, \
i18n("Save Analysis Data"), QFileInfo(m_controller->clipUrl()).absolutePath(), \
                i18n("Text File (*.txt)"));
 -    if (url.isEmpty())
 +    if (url.isEmpty()) {
          return;
 +    }
      KSharedConfigPtr config = KSharedConfig::openConfig(url, \
KConfig::SimpleConfig);  KConfigGroup analysisConfig(config, "Analysis");
      QTreeWidgetItem *current = m_analysisTree->currentItem();
@@@ -1112,10 -1089,9 +1112,10 @@@
  
  void ClipPropertiesController::slotLoadAnalysis()
  {
-     const QString url = QFileDialog::getOpenFileName(this, i18n("Open Analysis \
Data"), m_controller->clipUrl().adjusted(QUrl::RemoveFilename).path(), i18n("Text \
File (*.txt)")); +     const QString url = QFileDialog::getOpenFileName(this, \
i18n("Open Analysis Data"), QFileInfo(m_controller->clipUrl()).absolutePath(), \
                i18n("Text File (*.txt)"));
 -    if (url.isEmpty())
 +    if (url.isEmpty()) {
          return;
 +    }
      KSharedConfigPtr config = KSharedConfig::openConfig(url, \
KConfig::SimpleConfig);  KConfigGroup transConfig(config, "Analysis");
      // read the entries
diff --cc src/monitor/recmonitor.cpp
index 38e50df51,c2712ac23..84cb63a85
--- a/src/monitor/recmonitor.cpp
+++ b/src/monitor/recmonitor.cpp
@@@ -619,18 -586,15 +619,18 @@@ void RecMonitor::slotRecord(
          m_recAction->setChecked(true);
          QString extension = QStringLiteral("mpg");
          if (device_selector->currentIndex() == ScreenBag) {
 -	    extension = KdenliveSettings::grab_extension();
 -	}
 -        else if (device_selector->currentIndex() == Video4Linux) {
 +            extension = KdenliveSettings::grab_extension();
 +        } else if (device_selector->currentIndex() == Video4Linux) {
              // TODO: when recording audio only, allow configuration?
 -            if (!rec_video->isChecked()) extension = QStringLiteral("wav");
 -            else extension = KdenliveSettings::v4l_extension();
 +            if (!rec_video->isChecked()) {
 +                extension = QStringLiteral("wav");
 +            } else {
 +                extension = KdenliveSettings::v4l_extension();
 +            }
 +        } else if (device_selector->currentIndex() == BlackMagic) {
 +            extension = KdenliveSettings::decklink_extension();
          }
-         QString path = QUrl(m_capturePath).path() + QDir::separator() + \
                "capture0000." + extension;
 -        else if (device_selector->currentIndex() == BlackMagic) extension = \
KdenliveSettings::decklink_extension(); +         QString path = \
QUrl(m_capturePath).toLocalFile() + QDir::separator() + "capture0000." + extension;  \
int i = 1;  while (QFile::exists(path)) {
              QString num = QString::number(i).rightJustified(4, '0', false);
@@@ -704,11 -664,9 +704,11 @@@
              }
  
              showPreview = m_previewSettings->isChecked();
 -            if (!rec_video->isChecked()) showPreview = false;
 +            if (!rec_video->isChecked()) {
 +                showPreview = false;
 +            }
  
-             if (m_captureDevice->slotStartCapture(v4lparameters, \
m_captureFile.path(), playlist, showPreview, isXml)) { +             if \
(m_captureDevice->slotStartCapture(v4lparameters, m_captureFile.toLocalFile(), \
playlist, showPreview, isXml)) {  m_isCapturing = true;
                  m_recAction->setEnabled(false);
                  m_stopAction->setEnabled(true);
@@@ -970,9 -924,9 +970,9 @@@ void RecMonitor::manageCapturedFiles(
      filters << capturename + '*' + extension;
      const QStringList result = dir.entryList(filters, QDir::Files, QDir::Time);
      QList<QUrl> capturedFiles;
 -    foreach(const QString & name, result) {
 +    for (const QString &name : result) {
-         QUrl url = QUrl(dir.filePath(name));
-         if (QFile::exists(url.path())) {
+         QUrl url = QUrl::fromLocalFile(dir.absoluteFilePath(name));
+         if (QFile::exists(url.toLocalFile())) {
              KFileItem file(url);
              file.setDelayedMimeTypes(true);
              if (file.time(KFileItem::ModificationTime) > m_captureTime) {
diff --cc src/project/clipstabilize.cpp
index 1f4b379fa,06c06fd08..7ddb1a779
--- a/src/project/clipstabilize.cpp
+++ b/src/project/clipstabilize.cpp
@@@ -221,23 -224,18 +221,23 @@@ void ClipStabilize::fillParameters(QStr
  void ClipStabilize::slotValidate()
  {
      if (m_urls.count() == 1) {
-         if (QFile::exists(dest_url->url().path())) {
-             if (KMessageBox::questionYesNo(this, i18n("File %1 already exists.\nDo \
you want to overwrite it?", dest_url->url().path())) == KMessageBox::No) { +         \
                if (QFile::exists(dest_url->url().toLocalFile())) {
 -            if (KMessageBox::questionYesNo(this, i18n("File %1 already exists.\nDo \
you want to overwrite it?", dest_url->url().toLocalFile() )) == KMessageBox::No) \
return; ++            if (KMessageBox::questionYesNo(this, i18n("File %1 already \
exists.\nDo you want to overwrite it?", dest_url->url().toLocalFile())) == \
KMessageBox::No) {  +                return;
 +            }
          }
 -    }
 -    else {
 +    } else {
          QDir folder(dest_url->url().toLocalFile());
          QStringList existingFiles;
 -        foreach(const QString &path, m_urls) {
 -            if (folder.exists(path + ".mlt")) \
existingFiles.append(folder.absoluteFilePath(path + ".mlt"));  +        foreach \
(const QString &path, m_urls) {  +            if (folder.exists(path + ".mlt")) {
 +                existingFiles.append(folder.absoluteFilePath(path + ".mlt"));
 +            }
          }
          if (!existingFiles.isEmpty()) {
 -            if (KMessageBox::warningContinueCancelList(this, i18n("The stabilize \
job will overwrite the following files:"), existingFiles) ==  KMessageBox::Cancel) \
return;  +            if (KMessageBox::warningContinueCancelList(this, i18n("The \
stabilize job will overwrite the following files:"), existingFiles) ==  \
KMessageBox::Cancel) {  +                return;
 +            }
          }
      }
      accept();
diff --cc src/project/cliptranscode.cpp
index c42127e47,aae4c3929..1f7d0e26f
--- a/src/project/cliptranscode.cpp
+++ b/src/project/cliptranscode.cpp
@@@ -134,9 -131,9 +134,9 @@@ void ClipTranscode::slotStartTransCode(
      if (!m_urls.isEmpty() && urls_list->count() > 0) {
          // We are processing multiple clips
          source_url->setUrl(QUrl::fromLocalFile(m_urls.takeFirst()));
-         destination = dest_url->url().path() + QDir::separator() + \
                source_url->url().fileName();
-         QList<QListWidgetItem *> matching = \
urls_list->findItems(source_url->url().path(), Qt::MatchExactly); +         \
destination = QDir(dest_url->url().toLocalFile()).absoluteFilePath(source_url->url().fileName());
 +         QList<QListWidgetItem *> matching = \
                urls_list->findItems(source_url->url().toLocalFile(), \
                Qt::MatchExactly);
 -        if (matching.count() > 0) {
 +        if (!matching.isEmpty()) {
              matching.at(0)->setFlags(Qt::ItemIsSelectable);
              urls_list->setCurrentItem(matching.at(0));
          }
@@@ -236,15 -230,10 +236,15 @@@ void ClipTranscode::slotTranscodeFinish
              if (urls_list->count() > 0) {
                  QString params = ffmpeg_params->toPlainText().simplified();
                  QString extension = params.section(QStringLiteral("%1"), 1, \
                1).section(' ', 0, 0);
-                 url = QUrl::fromLocalFile(dest_url->url().path() + \
QDir::separator() + source_url->url().fileName() + extension); +                 url \
= QUrl::fromLocalFile(dest_url->url().toLocalFile() + QDir::separator() + \
                source_url->url().fileName() + extension);
 -            } else url = dest_url->url();
 -            if (m_automaticMode) emit transcodedClip(source_url->url(), url);
 -            else emit addClip(url, m_folderInfo);
 +            } else {
 +                url = dest_url->url();
 +            }
 +            if (m_automaticMode) {
 +                emit transcodedClip(source_url->url(), url);
 +            } else {
 +                emit addClip(url, m_folderInfo);
 +            }
          }
          if (urls_list->count() > 0 && m_urls.count() > 0) {
              m_transcodeProcess.close();
diff --cc src/project/dialogs/archivewidget.cpp
index d38070aca,c443f22f7..99fb3ff1f
--- a/src/project/dialogs/archivewidget.cpp
+++ b/src/project/dialogs/archivewidget.cpp
@@@ -115,32 -117,28 +115,34 @@@ ArchiveWidget::ArchiveWidget(const QStr
          ClipType t = clip->clipType();
          QString id = clip->clipId();
          if (t == SlideShow) {
-             QUrl slideUrl = clip->clipUrl();
              //TODO: Slideshow files
-             slideUrls.insert(id, slideUrl.toLocalFile());
-         } else if (t == Image) {
-             imageUrls.insert(id, clip->clipUrl().toLocalFile());
-         } else if (t == QText) {
+             slideUrls.insert(id, clip->clipUrl());
+         }
 -        else if (t == Image) imageUrls.insert(id, clip->clipUrl());
 -        else if (t == QText) allFonts << clip->property(QStringLiteral("family"));
++        else if (t == Image) {
++            imageUrls.insert(id, clip->clipUrl());
++        }
++        else if (t == QText) {
 +            allFonts << clip->property(QStringLiteral("family"));
-         } else if (t == Text) {
++        }
+         else if (t == Text) {
              QStringList imagefiles = \
                TitleWidget::extractImageList(clip->property(QStringLiteral("xmldata")));
                
              QStringList fonts = \
TitleWidget::extractFontList(clip->property(QStringLiteral("xmldata")));  \
extraImageUrls << imagefiles;  allFonts << fonts;
          } else if (t == Playlist) {
-             playlistUrls.insert(id, clip->clipUrl().toLocalFile());
-             QStringList files = \
ProjectSettings::extractPlaylistUrls(clip->clipUrl().toLocalFile()); +             \
playlistUrls.insert(id, clip->clipUrl()); +             QStringList files = \
ProjectSettings::extractPlaylistUrls(clip->clipUrl());  otherUrls << files;
 -        }
 -        else if (!clip->clipUrl().isEmpty()) {
 -            if (t == Audio) audioUrls.insert(id, clip->clipUrl());
 -            else {
 +        } else if (!clip->clipUrl().isEmpty()) {
 +            if (t == Audio) {
-                 audioUrls.insert(id, clip->clipUrl().toLocalFile());
++                audioUrls.insert(id, clip->clipUrl());
 +            } else {
-                 videoUrls.insert(id, clip->clipUrl().toLocalFile());
+                 videoUrls.insert(id, clip->clipUrl());
                  // Check if we have a proxy
                  QString proxy = clip->property(QStringLiteral("kdenlive:proxy"));
 -                if (!proxy.isEmpty() && proxy != QLatin1String("-") && \
QFile::exists(proxy)) proxyUrls.insert(id, proxy);  +                if \
(!proxy.isEmpty() && proxy != QLatin1String("-") && QFile::exists(proxy)) {  +        \
proxyUrls.insert(id, proxy);  +                }
              }
          }
      }
diff --cc src/project/dialogs/projectsettings.cpp
index 151f359ac,e3d7347b5..42073eba9
--- a/src/project/dialogs/projectsettings.cpp
+++ b/src/project/dialogs/projectsettings.cpp
@@@ -362,8 -364,8 +362,8 @@@ void ProjectSettings::slotUpdateFiles(b
              }
              allFonts << fonts;
          } else if (clip->clipType() == Playlist) {
-             QStringList files = extractPlaylistUrls(clip->clipUrl().toLocalFile());
+             QStringList files = extractPlaylistUrls(clip->clipUrl());
 -            foreach(const QString & file, files) {
 +            foreach (const QString &file, files) {
                  count++;
                  new QTreeWidgetItem(others, QStringList() << file);
              }
@@@ -528,10 -526,8 +528,10 @@@ QStringList ProjectSettings::extractPla
                  }
                  if (url.section('.', 0, -2).endsWith(QLatin1String("/.all"))) {
                      // slideshow clip, extract image urls
-                     urls << extractSlideshowUrls(QUrl(url));
+                     urls << extractSlideshowUrls(url);
 -                } else urls << url;
 +                } else {
 +                    urls << url;
 +                }
                  if (url.endsWith(QLatin1String(".mlt")) || \
                url.endsWith(QLatin1String(".kdenlive"))) {
                      //TODO: Do something to avoid infinite loops if 2 files \
reference themselves...  urls << extractPlaylistUrls(url);
@@@ -556,14 -552,15 +556,14 @@@
      return urls;
  }
  
 -
  //static
- QStringList ProjectSettings::extractSlideshowUrls(const QUrl &url)
+ QStringList ProjectSettings::extractSlideshowUrls(const QString &url)
  {
      QStringList urls;
-     QString path = url.adjusted(QUrl::RemoveFilename).toLocalFile();
-     QString ext = url.toLocalFile().section('.', -1);
+     QString path = QFileInfo(url).absolutePath();
+     QString ext = url.section('.', -1);
      QDir dir(path);
-     if (url.toLocalFile().contains(QStringLiteral(".all."))) {
+     if (url.contains(QStringLiteral(".all."))) {
          // this is a mime slideshow, like *.jpeg
          QStringList filters;
          filters << "*." + ext;
@@@ -579,12 -576,10 +579,12 @@@
          QRegExp rx(regexp);
          int count = 0;
          QStringList result = dir.entryList(QDir::Files);
 -        foreach(const QString & path, result) {
 -            if (rx.exactMatch(path)) count++;
 +        foreach (const QString &path, result) {
 +            if (rx.exactMatch(path)) {
 +                count++;
 +            }
          }
-         urls.append(url.toLocalFile() + " (" + i18np("1 image found", "%1 images \
found", count) + ')'); +         urls.append(url + " (" + i18np("1 image found", "%1 \
images found", count) + ')');  }
      return urls;
  }
diff --cc src/project/dialogs/projectsettings.h
index 15019938c,374f3761f..d5eb0fb1c
--- a/src/project/dialogs/projectsettings.h
+++ b/src/project/dialogs/projectsettings.h
@@@ -46,9 -47,9 +46,9 @@@ public
      int proxyImageMinSize() const;
      QString proxyParams() const;
      QString proxyExtension() const;
 -    const QMap <QString, QString> metadata() const;
 +    const QMap<QString, QString> metadata() const;
      static QStringList extractPlaylistUrls(const QString &path);
-     static QStringList extractSlideshowUrls(const QUrl &url);
+     static QStringList extractSlideshowUrls(const QString &url);
      const QString selectedPreview() const;
      const QString storageFolder() const;
  
diff --cc src/project/jobs/cutclipjob.cpp
index 340e17d71,3bbbe18df..68c2984a0
--- a/src/project/jobs/cutclipjob.cpp
+++ b/src/project/jobs/cutclipjob.cpp
@@@ -273,15 -250,13 +273,15 @@@ QList<ProjectClip *> CutClipJob::filter
      return result;
  }
  
 -// static 
 +// static
  
 -QHash <ProjectClip *, AbstractClipJob *> CutClipJob::prepareCutClipJob(double fps, \
double originalFps, ProjectClip *clip)  +QHash<ProjectClip *, AbstractClipJob *> \
CutClipJob::prepareCutClipJob(double fps, double originalFps, ProjectClip *clip)  {
 -    QHash <ProjectClip *, AbstractClipJob *> jobs;
 -    if (!clip) return jobs;
 +    QHash<ProjectClip *, AbstractClipJob *> jobs;
 +    if (!clip) {
 +        return jobs;
 +    }
-     QString source = clip->url().toLocalFile();
+     QString source = clip->url();
      QPoint zone = clip->zone();
      QString ext = source.section('.', -1);
      QString dest = source.section('.', 0, -2) + '_' + QString::number(zone.x()) + \
'.' + ext; @@@ -367,10 -334,9 +367,10 @@@ QHash<ProjectClip *, AbstractClipJob *
      QStringList existingFiles;
      QStringList sources;
      QStringList destinations;
 +    destinations.reserve(clips.count());
 +    sources.reserve(clips.count());
      for (int i = 0; i < clips.count(); i++) {
-         QString source = clips.at(i)->url().toLocalFile();
+         QString source = clips.at(i)->url();
          sources << source;
          QString newFile = params.section(' ', -1).replace(QLatin1String("%1"), \
source);  destinations << newFile;
@@@ -416,9 -379,8 +416,9 @@@
          QString dest;
          if (clips.count() > 1) {
              dest = destinations.at(i);
 +        } else {
-             dest = ui.file_url->url().path();
++            dest = ui.file_url->url().toLocalFile();
          }
 -        else dest = ui.file_url->url().toLocalFile();
          QStringList jobParams;
          jobParams << QString::number((int) AbstractClipJob::TRANSCODEJOB);
          jobParams << dest << src << QString() << QString();
@@@ -439,9 -401,9 +439,9 @@@ QHash<ProjectClip *, AbstractClipJob *
      // Might be useful some day
      Q_UNUSED(parameters);
  
 -    QHash <ProjectClip *, AbstractClipJob *> jobs;
 +    QHash<ProjectClip *, AbstractClipJob *> jobs;
      foreach (ProjectClip *clip, clips) {
-         QString source = clip->url().toLocalFile();
+         QString source = clip->url();
          QStringList jobParams;
          int duration = clip->duration().frames(fps) * clip->getOriginalFps() / fps;
          jobParams << QString::number((int) AbstractClipJob::ANALYSECLIPJOB) << \
                QString() << source << QString::number(duration);
diff --cc src/project/jobs/filterjob.cpp
index e53d41502,9f04bcc88..fbe349d15
--- a/src/project/jobs/filterjob.cpp
+++ b/src/project/jobs/filterjob.cpp
@@@ -57,13 -58,12 +57,13 @@@ QList<ProjectClip *> FilterJob::filterC
      return result;
  }
  
 -QHash <ProjectClip *, AbstractClipJob *> FilterJob::prepareJob(QList <ProjectClip*> \
clips, QStringList parameters)  +QHash<ProjectClip *, AbstractClipJob *> \
FilterJob::prepareJob(const QList<ProjectClip *> &clips, const QStringList \
&parameters)  {
 -    QHash <ProjectClip *, AbstractClipJob *> jobs;
 +    QHash<ProjectClip *, AbstractClipJob *> jobs;
      QStringList sources;
 +    sources.reserve(clips.count());
      for (int i = 0; i < clips.count(); i++) {
-         sources << clips.at(i)->url().toLocalFile();
+         sources << clips.at(i)->url();
      }
      QString filterName = parameters.first();
      if (filterName == QLatin1String("timewarp")) {
@@@ -80,32 -80,30 +80,32 @@@
          QPointer<ClipSpeed> d = new ClipSpeed(clips.count() == 1 ? \
QUrl::fromLocalFile(sources.first() + QStringLiteral(".mlt")) : \
QUrl::fromLocalFile(sources.first()).adjusted(QUrl::RemoveFilename), \
multipleSelection, QApplication::activeWindow());  if (d->exec() == \
QDialog::Accepted) {  QLocale locale;
 -            QString speedString = \
QString("timewarp:%1:").arg(locale.toString(d->speed()/100));  +            QString \
speedString = QStringLiteral("timewarp:%1:").arg(locale.toString(d->speed() / 100));  \
QDir destFolder;  if (multipleSelection) {
-                 destFolder = QDir(d->selectedUrl().path());
+                 destFolder = QDir(d->selectedUrl().toLocalFile());
              }
 -        for (int i = 0; i < clips.count(); i++) {
 -            QString prodstring = speedString + sources.at(i);
 -            producerParams.insert(QStringLiteral("producer"), prodstring);
 -            QString destination;
 -            if (multipleSelection) {
 -                destination = \
destFolder.absoluteFilePath(QUrl::fromLocalFile(sources.at(i)).fileName() + \
                QStringLiteral(".mlt"));
 -            } else {
 -                destination = d->selectedUrl().toLocalFile();
 -            }
 -            if (QFile::exists(destination)) {
 -                if (KMessageBox::questionYesNo(QApplication::activeWindow(), \
i18n("File %1 already exists.\nDo you want to overwrite it?", destination)) != \
KMessageBox::Yes) continue;  +            for (int i = 0; i < clips.count(); i++) {
 +                QString prodstring = speedString + sources.at(i);
 +                producerParams.insert(QStringLiteral("producer"), prodstring);
 +                QString destination;
 +                if (multipleSelection) {
 +                    destination = \
destFolder.absoluteFilePath(QUrl::fromLocalFile(sources.at(i)).fileName() + \
QStringLiteral(".mlt"));  +                } else {
-                     destination = d->selectedUrl().path();
++                    destination = d->selectedUrl().toLocalFile();
 +                }
 +                if (QFile::exists(destination)) {
 +                    if (KMessageBox::questionYesNo(QApplication::activeWindow(), \
i18n("File %1 already exists.\nDo you want to overwrite it?", destination)) != \
KMessageBox::Yes) {  +                        continue;
 +                    }
 +                }
 +                consumerParams.insert(QStringLiteral("consumer"), "xml:" + \
destination);  +                ProjectClip *clip = clips.at(i);
 +                MeltJob *job = new MeltJob(clip->clipType(), clip->clipId(), \
producerParams, filterParams, consumerParams, extraParams);  +                \
job->description = i18n("Reverse clip");  +                \
job->setAddClipToProject(1);  +                jobs.insert(clip, job);
              }
 -            consumerParams.insert(QStringLiteral("consumer"), "xml:" + \
                destination);
 -            ProjectClip *clip = clips.at(i);
 -            MeltJob *job = new MeltJob(clip->clipType(), clip->clipId(), \
                producerParams, filterParams, consumerParams, extraParams);
 -            job->description = i18n("Reverse clip");
 -            job->setAddClipToProject(1);
 -            jobs.insert(clip, job);
 -        }
          }
          delete d;
          return jobs;
diff --cc src/project/projectmanager.cpp
index 48f3914a9,63c0731d1..ff6f59afb
--- a/src/project/projectmanager.cpp
+++ b/src/project/projectmanager.cpp
@@@ -202,7 -206,7 +202,7 @@@ void ProjectManager::newFile(bool showP
      // Set default target tracks to upper audio / lower video tracks
      m_trackView->audioTarget = projectTracks.y() > 0 ? projectTracks.y() : -1;
      m_trackView->videoTarget = projectTracks.x() > 0 ? projectTracks.y() + 1 : -1;
-     connect(m_trackView->projectView(), SIGNAL(importPlaylistClips(ItemInfo, QUrl, \
QUndoCommand *)), pCore->bin(), SLOT(slotExpandUrl(ItemInfo, QUrl, QUndoCommand *)), \
                Qt::DirectConnection);
 -    connect(m_trackView->projectView(), SIGNAL(importPlaylistClips(ItemInfo, const \
QString&, QUndoCommand*)), pCore->bin(), SLOT(slotExpandUrl(ItemInfo, const QString&, \
QUndoCommand*)), Qt::DirectConnection); ++    connect(m_trackView->projectView(), \
SIGNAL(importPlaylistClips(ItemInfo, QString, QUndoCommand *)), pCore->bin(), \
SLOT(slotExpandUrl(ItemInfo, QString, QUndoCommand *)), Qt::DirectConnection);  
      m_trackView->loadTimeline();
      pCore->window()->m_timelineArea->addTab(m_trackView, \
QIcon::fromTheme(QStringLiteral("kdenlive")), doc->description()); @@@ -563,7 -567,7 \
                +563,7 @@@ void ProjectManager::doOpenFile(const Q
      m_trackView->videoTarget = \
doc->getDocumentProperty(QStringLiteral("videotargettrack"), \
QStringLiteral("-1")).toInt();  m_trackView->loadTimeline();
      m_trackView->loadGuides(pCore->binController()->takeGuidesData());
-     connect(m_trackView->projectView(), SIGNAL(importPlaylistClips(ItemInfo, QUrl, \
QUndoCommand *)), pCore->bin(), SLOT(slotExpandUrl(ItemInfo, QUrl, QUndoCommand *)), \
                Qt::DirectConnection);
 -    connect(m_trackView->projectView(), SIGNAL(importPlaylistClips(ItemInfo, const \
QString&, QUndoCommand*)), pCore->bin(), SLOT(slotExpandUrl(ItemInfo, const QString&, \
QUndoCommand*)), Qt::DirectConnection); ++    connect(m_trackView->projectView(), \
SIGNAL(importPlaylistClips(ItemInfo, QString, QUndoCommand *)), pCore->bin(), \
SLOT(slotExpandUrl(ItemInfo, QString, QUndoCommand *)), Qt::DirectConnection);  \
                pCore->window()->connectDocument();
      bool disabled = \
m_project->getDocumentProperty(QStringLiteral("disabletimelineeffects")) == \
                QLatin1String("1");
      QAction *disableEffects = \
pCore->window()->actionCollection()->action(QStringLiteral("disable_timeline_effects"));
                
diff --cc src/stopmotion/stopmotion.cpp
index 760e83c9e,bb83dece9..a2d4913da
--- a/src/stopmotion/stopmotion.cpp
+++ b/src/stopmotion/stopmotion.cpp
@@@ -730,13 -713,12 +730,13 @@@ void StopmotionWidget::slotCreateThumbs
  
  QString StopmotionWidget::getPathForFrame(int ix, QString seqName)
  {
 -    if (seqName.isEmpty())
 +    if (seqName.isEmpty()) {
          seqName = m_sequenceName;
 +    }
-     return m_projectFolder.path() + QDir::separator() + seqName + QLatin1Char('_') \
+ QString::number(ix).rightJustified(4, '0', false) + QStringLiteral(".png"); +     \
return m_projectFolder.toLocalFile() + QDir::separator() + seqName + QLatin1Char('_') \
+ QString::number(ix).rightJustified(4, '0', false) + QStringLiteral(".png");  }
  
 -void StopmotionWidget::slotShowFrame(const QString& path)
 +void StopmotionWidget::slotShowFrame(const QString &path)
  {
      //slotLive(false);
      QImage img(path);
diff --cc src/timeline/customtrackview.cpp
index a35085df8,3fd84c09d..c5c7d2c5f
--- a/src/timeline/customtrackview.cpp
+++ b/src/timeline/customtrackview.cpp
@@@ -7348,13 -6893,13 +7348,13 @@@ void CustomTrackView::setAudioAlignRefe
              m_audioAlignmentReference = clip;
              Mlt::Producer *prod = \
m_timeline->track(clip->track())->clipProducer(m_document->renderer()->getBinProducer(clip->getBinId()), \
clip->clipState());  if (!prod) {
 -                qWarning() << "couldn't load producer for clip " << \
clip->getBinId() << " on track " << clip->track();  +                \
qCWarning(KDENLIVE_LOG) << "couldn't load producer for clip " << clip->getBinId() << \
" on track " << clip->track();  return;
              }
-             AudioEnvelope *envelope = new \
AudioEnvelope(clip->binClip()->url().path(), prod); +             AudioEnvelope \
*envelope = new AudioEnvelope(clip->binClip()->url(), prod);  m_audioCorrelator = new \
                AudioCorrelation(envelope);
 -            connect(m_audioCorrelator, SIGNAL(gotAudioAlignData(int,int,int)), \
                this, SLOT(slotAlignClip(int,int,int)));
 -            connect(m_audioCorrelator, SIGNAL(displayMessage(QString,MessageType)), \
this, SIGNAL(displayMessage(QString,MessageType)));  +            \
connect(m_audioCorrelator, &AudioCorrelation::gotAudioAlignData, this, \
&CustomTrackView::slotAlignClip);  +            connect(m_audioCorrelator, \
                &AudioCorrelation::displayMessage, this, \
                &CustomTrackView::displayMessage);
              emit displayMessage(i18n("Processing audio, please wait."), \
ProcessingJobMessage);  }
          return;
@@@ -7392,10 -6937,10 +7392,10 @@@ void CustomTrackView::alignAudio(
                  ItemInfo info = clip->info();
                  Mlt::Producer *prod = \
m_timeline->track(clip->track())->clipProducer(m_document->renderer()->getBinProducer(clip->getBinId()), \
clip->clipState());  if (!prod) {
 -                    qWarning() << "couldn't load producer for clip " << \
clip->getBinId() << " on track " << clip->track();  +                    \
qCWarning(KDENLIVE_LOG) << "couldn't load producer for clip " << clip->getBinId() << \
" on track " << clip->track();  return;
                  }
-                 AudioEnvelope *envelope = new \
AudioEnvelope(clip->binClip()->url().path(), prod, +                 AudioEnvelope \
*envelope = new AudioEnvelope(clip->binClip()->url(), prod,  \
info.cropStart.frames(m_document->fps()),  \
info.cropDuration.frames(m_document->fps()),  clip->track(),
@@@ -8044,9 -7555,7 +8044,9 @@@ QStringList CustomTrackView::extractTra
              transitionXml = transitionitem->toXML();
              // luma files in transitions are in "resource" property
              QString luma = EffectsList::parameter(transitionXml, \
                QStringLiteral("resource"));
 -            if (!luma.isEmpty()) urls << QUrl::fromLocalFile(luma).toLocalFile();
 +            if (!luma.isEmpty()) {
-                 urls << QUrl(luma).path();
++                urls << QUrl::fromLocalFile(luma).toLocalFile();
 +            }
          }
      }
      urls.removeDuplicates();
diff --cc src/timeline/customtrackview.h
index 749248caf,d7b9f5f6f..18d63214c
--- a/src/timeline/customtrackview.h
+++ b/src/timeline/customtrackview.h
@@@ -612,7 -614,7 +612,7 @@@ signals
      /** @brief Guides were changed, inform render widget*/
      void guidesUpdated();
      /** @brief Prepare importing and expand of a playlist clip */
-     void importPlaylistClips(const ItemInfo &info, const QUrl &url, QUndoCommand \
                *expandCommand);
 -    void importPlaylistClips(ItemInfo info, const QString &url, QUndoCommand \
*expandCommand); ++    void importPlaylistClips(const ItemInfo &info, const QString \
&url, QUndoCommand *expandCommand);  /** @brief Show a specific frame in clip monitor \
*/  void showClipFrame(const QString &id, int frame);
      /** @brief Select active keyframe in effect stack */
diff --cc src/timeline/timeline.cpp
index 33254424e,e17154ed3..445b57839
--- a/src/timeline/timeline.cpp
+++ b/src/timeline/timeline.cpp
@@@ -563,12 -529,10 +563,12 @@@ void Timeline::parseDocument(const QDom
          m_doc->saveCustomEffects(effects);
      }
  
 -    if (!m_documentErrors.isNull()) KMessageBox::sorry(this, m_documentErrors);
 +    if (!m_documentErrors.isNull()) {
 +        KMessageBox::sorry(this, m_documentErrors);
 +    }
      if (mlt.hasAttribute(QStringLiteral("upgraded")) || \
mlt.hasAttribute(QStringLiteral("modified"))) {  // Our document was upgraded, create \
                a backup copy just in case
-         QString baseFile = m_doc->url().path().section(QStringLiteral(".kdenlive"), \
0, 0); +         QString baseFile = \
m_doc->url().toLocalFile().section(QStringLiteral(".kdenlive"), 0, 0);  int ct = 0;
          QString backupFile = baseFile + "_backup" + QString::number(ct) + \
".kdenlive";  while (QFile::exists(backupFile)) {
diff --cc src/titler/titlewidget.cpp
index 669f48ad0,ba8b15e95..279b9a0ff
--- a/src/titler/titlewidget.cpp
+++ b/src/titler/titlewidget.cpp
@@@ -750,13 -744,11 +750,13 @@@ void TitleWidget::slotImageTool(
      QFileDialog dialog(this, i18n("Add Image"), clipFolder);
      dialog.setAcceptMode(QFileDialog::AcceptOpen);
      dialog.setNameFilters(mimeTypeFilters);
 -    if (dialog.exec() != QDialog::Accepted) return;
 +    if (dialog.exec() != QDialog::Accepted) {
 +        return;
 +    }
      QUrl url = QUrl::fromLocalFile(dialog.selectedFiles().at(0));
      if (url.isValid()) {
-         KRecentDirs::add(QStringLiteral(":KdenliveImageFolder"), \
                url.adjusted(QUrl::RemoveFilename).path());
-         if (url.path().endsWith(QLatin1String(".svg"))) {
+         KRecentDirs::add(QStringLiteral(":KdenliveImageFolder"), \
url.adjusted(QUrl::RemoveFilename).toLocalFile()); +         if \
(url.toLocalFile().endsWith(QLatin1String(".svg"))) {  MySvgItem *svg = new \
                MySvgItem(url.toLocalFile());
              svg->setFlags(QGraphicsItem::ItemIsMovable | \
QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemSendsGeometryChanges);  \
svg->setZValue(m_count++); @@@ -1934,9 -1889,8 +1934,9 @@@ void \
TitleWidget::saveTitle(QUrl url  delete fs;
      }
      if (url.isValid()) {
 -        if (m_titledocument.saveDocument(url, m_startViewport, m_endViewport, \
m_tc.getFrameCount(title_duration->text()), embed_image) == false)  +        if \
(m_titledocument.saveDocument(url, m_startViewport, m_endViewport, \
                m_tc.getFrameCount(title_duration->text()), embed_image) == false) {
-             KMessageBox::error(this, i18n("Cannot write to file %1", url.path()));
+             KMessageBox::error(this, i18n("Cannot write to file %1", \
url.toLocalFile()));  +        }
      }
  }
  
diff --cc src/utils/resourcewidget.cpp
index d9935bd3f,e001748a6..7ee8e29ba
--- a/src/utils/resourcewidget.cpp
+++ b/src/utils/resourcewidget.cpp
@@@ -490,18 -494,21 +490,18 @@@ void ResourceWidget::slotGotFile(KJob *
  {
      QString errTxt;
      button_import->setEnabled(true);
 -    if (job->error() )
 -    {
 +    if (job->error()) {
  
 -        errTxt  =job->errorString();
 +        errTxt  = job->errorString();
          KMessageBox::sorry(this, errTxt, i18n("Error Loading Data"));
  
 -        qDebug()<<"//file import job errored: "<<errTxt;
 +        qCDebug(KDENLIVE_LOG) << "//file import job errored: " << errTxt;
          return;
 -    }
 -    else
 -    {
 -        KIO::FileCopyJob* copyJob = static_cast<KIO::FileCopyJob*>( job );
 +    } else {
 +        KIO::FileCopyJob *copyJob = static_cast<KIO::FileCopyJob *>(job);
          const QUrl filePath = copyJob->destUrl();
  
-         KMessageBox::information(this, i18n("Resource saved to ") + \
                filePath.path(), i18n("Data Imported"));
 -        KMessageBox::information(this,i18n( "Resource saved to ") + \
filePath.toLocalFile(), i18n("Data Imported")); ++        \
KMessageBox::information(this, i18n("Resource saved to ") + filePath.toLocalFile(), \
i18n("Data Imported"));  emit addClip(filePath, QStringList());
      }
  }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic