]> git.sesse.net Git - kdenlive/commitdiff
Fix crash on app close
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 14 Oct 2008 15:05:46 +0000 (15:05 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Tue, 14 Oct 2008 15:05:46 +0000 (15:05 +0000)
svn path=/branches/KDE4/; revision=2470

src/mainwindow.cpp
src/monitor.cpp
src/monitor.h
src/monitormanager.cpp
src/monitormanager.h
src/renderer.cpp
src/renderer.h

index 82bc42ef83cfb56390030abb7a4e72a51377e037..7a73edd47fa667704dfa30ae474b23982a6b7d26 100644 (file)
@@ -318,6 +318,7 @@ void MainWindow::queryQuit() {
 //virtual
 bool MainWindow::queryClose() {
     saveOptions();
+    if (m_monitorManager) m_monitorManager->stopActiveMonitor();
     if (m_activeDocument && m_activeDocument->isModified()) {
         switch (KMessageBox::warningYesNoCancel(this, i18n("Save changes to document ?"))) {
         case KMessageBox::Yes :
index ef6426f50a52825a96909105615e832041e46b63..267728778cd71687e88370ec6e50c4b43bd85b73 100644 (file)
@@ -463,6 +463,14 @@ void Monitor::refreshMonitor(bool visible) {
     }
 }
 
+void Monitor::pause() {
+    if (render == NULL) return;
+    if (!m_isActive) m_monitorManager->activateMonitor(m_name);
+    render->pause();
+    //m_playAction->setChecked(true);
+    //m_playAction->setIcon(m_pauseIcon);
+}
+
 void Monitor::slotPlay() {
     if (render == NULL) return;
     if (!m_isActive) m_monitorManager->activateMonitor(m_name);
index e43aefa9ac2787dfbcca8928f9b2e396a294ab4c..017864d4af2f51a69fa6bfc285adc3787294479e 100644 (file)
@@ -54,6 +54,7 @@ public:
     QString name() const;
     void resetSize();
     bool isActive() const;
+    void pause();
 
 protected:
     virtual void mousePressEvent(QMouseEvent * event);
index 9b44fe2d0dab3dd55e022b75d5273aa628dacfa7..36459bd0e8f5da95ba3efe60f8c20dbccbabce38 100644 (file)
@@ -67,6 +67,11 @@ void MonitorManager::switchMonitors() {
     }
 }
 
+void MonitorManager::stopActiveMonitor() {
+    if (m_clipMonitor->isActive()) m_clipMonitor->pause();
+    else m_projectMonitor->pause();
+}
+
 void MonitorManager::slotPlay() {
     if (m_clipMonitor->isActive()) m_clipMonitor->slotPlay();
     else m_projectMonitor->slotPlay();
index 6d9a9a7b60a6602e143891445af4a400e93730a9..4eea714128f409deedc4135b2f7a2a25984e5963 100644 (file)
@@ -35,6 +35,7 @@ public:
     Timecode timecode();
     void switchMonitors();
     void resetProfiles(Timecode tc);
+    void stopActiveMonitor();
 
 public slots:
     void activateMonitor(QString name = QString::null);
index 74b6ceb2b870eaf7ee01f798f2d9d05a4fa6de80..394bb4668305ad69d157091c670cd72ed6d839d6 100644 (file)
@@ -1006,6 +1006,18 @@ void Render::stop(const GenTime & startTime) {
     m_mltConsumer->purge();
 }
 
+void Render::pause() {
+    if (!m_mltProducer || !m_mltConsumer)
+        return;
+    if (m_isZoneMode) resetZoneMode();
+    m_isBlocked = true;
+    m_mltConsumer->set("refresh", 0);
+    m_mltProducer->set_speed(0.0);
+    emit rendererPosition(m_framePosition);
+    m_mltProducer->seek(m_framePosition);
+    m_mltConsumer->purge();
+}
+
 void Render::switchPlay() {
     if (!m_mltProducer || !m_mltConsumer)
         return;
index 6d8d84275ae2f02d6d26b63f88c77413d09300ff..45688b92cf02b858db24564dbabd45973e3f9d8a 100644 (file)
@@ -101,6 +101,7 @@ Q_OBJECT public:
     backwards. Does not specify start/stop times for playback.*/
     void play(double speed);
     void switchPlay();
+    void pause();
     /** stop playing */
     void stop(const GenTime & startTime);
     void setVolume(double volume);