]> git.sesse.net Git - kdenlive/blobdiff - src/mainwindow.cpp
Correctly update monitor when changing a title clip duration
[kdenlive] / src / mainwindow.cpp
index fbab57bc184afd3fe85714194c96241e3e0c9bd5..7990b3b6cd7da381bd0c7ad40687009866de81c9 100644 (file)
@@ -372,13 +372,12 @@ MainWindow::MainWindow(const QString &MltPath, const KUrl & Url, QWidget *parent
     // precedence, then "openlastproject", then just a plain empty file.
     // If opening Url fails, openlastproject will _not_ be used.
     if (!Url.isEmpty()) {
-        openFile(Url);
-    } else {
-        if (KdenliveSettings::openlastproject()) {
-            openLastFile();
-        }
-    }
-    if (m_timelineArea->count() == 0) {
+        // delay loading so that the window shows up
+        m_startUrl = Url;
+        QTimer::singleShot(500, this, SLOT(openFile()));
+    } else if (KdenliveSettings::openlastproject()) {
+        QTimer::singleShot(500, this, SLOT(openLastFile()));
+    } else { //if (m_timelineArea->count() == 0) {
         newFile(false);
     }
 
@@ -1400,6 +1399,11 @@ bool MainWindow::saveFile()
 
 void MainWindow::openFile()
 {
+    if (!m_startUrl.isEmpty()) {
+        openFile(m_startUrl);
+        m_startUrl = KUrl();
+        return;
+    }
     // Check that the Kdenlive mime type is correctly installed
     QString mimetype = "application/x-kdenlive";
     KMimeType::Ptr mime = KMimeType::mimeType(mimetype);
@@ -1457,6 +1461,8 @@ void MainWindow::openFile(const KUrl &url)
         }
     }
     if (!KdenliveSettings::activatetabs()) closeCurrentDocument();
+    m_messageLabel->setMessage(i18n("Opening file %1", url.path()), InformationMessage);
+    qApp->processEvents();
     doOpenFile(url, NULL);
 }
 
@@ -1669,6 +1675,7 @@ void MainWindow::slotRenderProject()
     if (!m_renderWidget) {
         QString projectfolder = m_activeDocument ? m_activeDocument->projectFolder().path(KUrl::AddTrailingSlash) : KdenliveSettings::defaultprojectfolder();
         m_renderWidget = new RenderWidget(projectfolder, this);
+        connect(m_renderWidget, SIGNAL(shutdown()), this, SLOT(slotShutdown()));
         connect(m_renderWidget, SIGNAL(selectedRenderProfile(const QString &, const QString &, const QString&)), this, SLOT(slotSetDocumentRenderProfile(const QString &, const QString &, const QString&)));
         connect(m_renderWidget, SIGNAL(prepareRenderingData(bool, bool, const QString&)), this, SLOT(slotPrepareRendering(bool, bool, const QString&)));
         connect(m_renderWidget, SIGNAL(abortProcess(const QString &)), this, SIGNAL(abortRenderJob(const QString &)));
@@ -1782,7 +1789,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
             disconnect(m_activeTimeline->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor()));
             disconnect(m_activeTimeline, SIGNAL(zoneMoved(int, int)), this, SLOT(slotZoneMoved(int, int)));
             disconnect(m_projectList, SIGNAL(loadingIsOver()), m_activeTimeline->projectView(), SLOT(slotUpdateAllThumbs()));
-            disconnect(m_projectList, SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType)));
+            disconnect(m_projectList, SIGNAL(displayMessage(const QString&, int)), this, SLOT(slotGotProgressInfo(const QString&, int)));
             m_effectStack->clear();
         }
         //m_activeDocument->setRenderer(NULL);
@@ -1851,7 +1858,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
     connect(trackView->projectView(), SIGNAL(activateDocumentMonitor()), m_projectMonitor, SLOT(activateMonitor()));
     connect(trackView, SIGNAL(zoneMoved(int, int)), this, SLOT(slotZoneMoved(int, int)));
     connect(m_projectList, SIGNAL(loadingIsOver()), trackView->projectView(), SLOT(slotUpdateAllThumbs()));
-    connect(m_projectList, SIGNAL(displayMessage(const QString&, MessageType)), m_messageLabel, SLOT(setMessage(const QString&, MessageType)));
+    connect(m_projectList, SIGNAL(displayMessage(const QString&, int)), this, SLOT(slotGotProgressInfo(const QString&, int)));
 
 
     trackView->projectView()->setContextMenu(m_timelineContextMenu, m_timelineContextClipMenu, m_timelineContextTransitionMenu, m_clipTypeGroup);
@@ -1875,7 +1882,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
     m_saveAction->setEnabled(doc->isModified());
     m_activeDocument = doc;
     m_activeTimeline->updateProjectFps();
-    m_projectList->updateAllClips();
+    m_activeDocument->checkProjectClips();
     if (KdenliveSettings::dropbframes()) slotUpdatePreviewSettings();
 
     // set tool to select tool
@@ -2336,7 +2343,10 @@ void MainWindow::slotShowClipProperties(DocClipBase *clip)
         if (dia_ui->exec() == QDialog::Accepted) {
             QMap <QString, QString> newprops;
             newprops.insert("xmldata", dia_ui->xml().toString());
-            newprops.insert("out", QString::number(dia_ui->duration()));
+            if (dia_ui->duration() != clip->duration().frames(m_activeDocument->fps()) - 1) {
+                // duration changed, we need to update duration
+                newprops.insert("out", QString::number(dia_ui->duration()));
+            }
             EditClipCommand *command = new EditClipCommand(m_projectList, clip->getId(), clip->properties(), newprops, true);
             m_activeDocument->commandStack()->push(command);
             m_activeTimeline->projectView()->slotUpdateClip(clip->getId());
@@ -2419,6 +2429,19 @@ void MainWindow::slotSetTool(PROJECTTOOL tool)
 {
     if (m_activeDocument && m_activeTimeline) {
         //m_activeDocument->setTool(tool);
+        QString message;
+        switch (tool)  {
+        case SPACERTOOL:
+            message = i18n("Ctrl + click to use spacer on current track only");
+            break;
+        case RAZORTOOL:
+            message = i18n("Click on a clip to cut it");
+            break;
+        default:
+            message = i18n("Shift + click to create a selection rectangle, Ctrl + click to add an item to selection");
+            break;
+        }
+        m_messageLabel->setMessage(message, InformationMessage);
         m_activeTimeline->projectView()->setTool(tool);
     }
 }
@@ -2861,4 +2884,16 @@ void MainWindow::slotRevert()
     doOpenFile(url, NULL);
 }
 
+
+void MainWindow::slotShutdown()
+{
+    if (m_activeDocument) m_activeDocument->setModified(false);
+    // Call shutdown
+    QDBusConnectionInterface* interface = QDBusConnection::sessionBus().interface();
+    if (interface && interface->isServiceRegistered("org.kde.ksmserver")) {
+        QDBusInterface smserver("org.kde.ksmserver", "/KSMServer", "org.kde.KSMServerInterface");
+        smserver.call("logout", 1, 2, 2);
+    }
+}
+
 #include "mainwindow.moc"