]> git.sesse.net Git - kdenlive/blobdiff - src/kdenlivedoc.cpp
Fix crash on KDE < 4.5
[kdenlive] / src / kdenlivedoc.cpp
index 86a73e612f0968f87f4c33e8636ff5467b8192a4..7064f2ccb6b5015b3fb13e316042255bef913606 100644 (file)
@@ -39,6 +39,7 @@
 #include <KFileDialog>
 #include <KIO/NetAccess>
 #include <KIO/CopyJob>
+#include <KIO/JobUiDelegate>
 #include <KApplication>
 #include <KGlobal>
 #include <KBookmarkManager>
 
 #include <mlt++/Mlt.h>
 
+#include "locale.h"
+
+
 const double DOCUMENTVERSION = 0.88;
 
-KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, QMap <QString, QString> properties, const QPoint tracks, Render *render, KTextEdit *notes, bool *openBackup, MainWindow *parent, KProgressDialog *progressDialog) :
+KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, QMap <QString, QString> properties, const QPoint &tracks, Render *render, KTextEdit *notes, bool *openBackup, MainWindow *parent, KProgressDialog *progressDialog) :
     QObject(parent),
     m_autosave(NULL),
     m_url(url),
@@ -64,6 +68,18 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
     m_modified(false),
     m_projectFolder(projectFolder)
 {
+    // init m_profile struct
+    m_profile.frame_rate_num = 0;
+    m_profile.frame_rate_den = 0;
+    m_profile.width = 0;
+    m_profile.height = 0;
+    m_profile.progressive = 0;
+    m_profile.sample_aspect_num = 0;
+    m_profile.sample_aspect_den = 0;
+    m_profile.display_aspect_num = 0;
+    m_profile.display_aspect_den = 0;
+    m_profile.colorspace = 0;
+
     m_clipManager = new ClipManager(this);
     m_autoSaveTimer = new QTimer(this);
     m_autoSaveTimer->setSingleShot(true);
@@ -95,8 +111,11 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
         m_documentProperties[i.key()] = i.value();
     }
 
-    if (QLocale() != QLocale::system()) {
-        QLocale::setDefault(QLocale::system());
+    if (QLocale().decimalPoint() != QLocale::system().decimalPoint()) {
+        setlocale(LC_NUMERIC, "");
+        QLocale systemLocale = QLocale::system();
+        systemLocale.setNumberOptions(QLocale::OmitGroupSeparator);
+        QLocale::setDefault(systemLocale);
         // locale conversion might need to be redone
         initEffects::parseEffectFiles();
     }
@@ -561,7 +580,7 @@ QPoint KdenliveDoc::zone() const
     return QPoint(m_documentProperties.value("zonein").toInt(), m_documentProperties.value("zoneout").toInt());
 }
 
-QDomDocument KdenliveDoc::xmlSceneList(const QString &scene, const QStringList expandedFolders)
+QDomDocument KdenliveDoc::xmlSceneList(const QString &scene, const QStringList &expandedFolders)
 {
     QDomDocument sceneList;
     sceneList.setContent(scene, true);
@@ -698,7 +717,7 @@ QDomDocument KdenliveDoc::xmlSceneList(const QString &scene, const QStringList e
     return sceneList;
 }
 
-bool KdenliveDoc::saveSceneList(const QString &path, const QString &scene, const QStringList expandedFolders, bool autosave)
+bool KdenliveDoc::saveSceneList(const QString &path, const QString &scene, const QStringList &expandedFolders, bool autosave)
 {
     QDomDocument sceneList = xmlSceneList(scene, expandedFolders);
     if (sceneList.isNull()) {
@@ -766,6 +785,7 @@ void KdenliveDoc::setProjectFolder(KUrl url)
 void KdenliveDoc::moveProjectData(KUrl url)
 {
     QList <DocClipBase*> list = m_clipManager->documentClipList();
+    KUrl::List cacheUrls;
     for (int i = 0; i < list.count(); i++) {
         DocClipBase *clip = list.at(i);
         if (clip->clipType() == TEXT) {
@@ -779,16 +799,17 @@ void KdenliveDoc::moveProjectData(KUrl url)
         KUrl oldVideoThumbUrl = KUrl(m_projectFolder.path(KUrl::AddTrailingSlash) + "thumbs/" + hash + ".png");
         KUrl oldAudioThumbUrl = KUrl(m_projectFolder.path(KUrl::AddTrailingSlash) + "thumbs/" + hash + ".thumb");
         if (KIO::NetAccess::exists(oldVideoThumbUrl, KIO::NetAccess::SourceSide, 0)) {
-            KUrl newUrl = KUrl(url.path(KUrl::AddTrailingSlash) + "thumbs/" + hash + ".png");
-            KIO::Job *job = KIO::copy(oldVideoThumbUrl, newUrl);
-            KIO::NetAccess::synchronousRun(job, 0);
+            cacheUrls << oldVideoThumbUrl;
         }
         if (KIO::NetAccess::exists(oldAudioThumbUrl, KIO::NetAccess::SourceSide, 0)) {
-            KUrl newUrl = KUrl(url.path(KUrl::AddTrailingSlash) + "thumbs/" + hash + ".thumb");
-            KIO::Job *job = KIO::copy(oldAudioThumbUrl, newUrl);
-            if (KIO::NetAccess::synchronousRun(job, 0)) clip->refreshThumbUrl();
+            cacheUrls << oldAudioThumbUrl;
         }
     }
+    if (!cacheUrls.isEmpty()) {
+        KIO::Job *job = KIO::copy(cacheUrls, KUrl(url.path(KUrl::AddTrailingSlash) + "thumbs/"));
+        job->ui()->setWindow(kapp->activeWindow());
+        KIO::NetAccess::synchronousRun(job, 0);
+    }
 }
 
 const QString &KdenliveDoc::profilePath() const
@@ -902,7 +923,7 @@ Render *KdenliveDoc::renderer()
     return m_render;
 }
 
-void KdenliveDoc::updateClip(const QString id)
+void KdenliveDoc::updateClip(const QString &id)
 {
     emit updateClipDisplay(id);
 }
@@ -1171,7 +1192,7 @@ void KdenliveDoc::deleteClip(const QString &clipId)
     emit signalDeleteProjectClip(clipId);
 }
 
-void KdenliveDoc::slotAddClipList(const KUrl::List urls, const QString group, const QString &groupId)
+void KdenliveDoc::slotAddClipList(const KUrl::List urls, const QString &group, const QString &groupId)
 {
     m_clipManager->slotAddClipList(urls, group, groupId);
     //emit selectLastAddedClip(QString::number(m_clipManager->lastClipId()));
@@ -1179,7 +1200,7 @@ void KdenliveDoc::slotAddClipList(const KUrl::List urls, const QString group, co
 }
 
 
-void KdenliveDoc::slotAddClipFile(const KUrl url, const QString group, const QString &groupId)
+void KdenliveDoc::slotAddClipFile(const KUrl &url, const QString &group, const QString &groupId)
 {
     m_clipManager->slotAddClipFile(url, group, groupId);
     emit selectLastAddedClip(QString::number(m_clipManager->lastClipId()));
@@ -1210,7 +1231,7 @@ void KdenliveDoc::slotCreateColorClip(const QString &name, const QString &color,
     emit selectLastAddedClip(QString::number(m_clipManager->lastClipId()));
 }
 
-void KdenliveDoc::slotCreateSlideshowClipFile(const QString name, const QString path, int count, const QString duration,
+void KdenliveDoc::slotCreateSlideshowClipFile(const QString &name, const QString &path, int count, const QString &duration,
         const bool loop, const bool crop, const bool fade,
         const QString &luma_duration, const QString &luma_file, const int softness,
         const QString &animation, QString group, const QString &groupId)
@@ -1553,7 +1574,9 @@ void KdenliveDoc::updateProjectFolderPlacesEntry()
 
     const QString file = KStandardDirs::locateLocal("data", "kfileplaces/bookmarks.xml");
     KBookmarkManager *bookmarkManager = KBookmarkManager::managerForFile(file, "kfilePlaces");
+    if (!bookmarkManager) return;
     KBookmarkGroup root = bookmarkManager->root();
+    
     KBookmark bookmark = root.first();
 
     QString kdenliveName = KGlobal::mainComponent().componentName();