]> git.sesse.net Git - kdenlive/blobdiff - src/monitor.cpp
Fix 2 crashes when clip and project monitor are side by side and resizing or seeking...
[kdenlive] / src / monitor.cpp
index b446886ec3304d31030b0f017df0413db7c2a1b5..6e64e829e2b8bbfeb99a2f55c5712a65c7d6715d 100644 (file)
@@ -455,6 +455,13 @@ void Monitor::mousePressEvent(QMouseEvent * event)
     }
 }
 
+void Monitor::resizeEvent(QResizeEvent *event)
+{
+    Q_UNUSED(event);
+    if (render && isVisible() && isActive()) render->doRefresh();
+}
+
+
 void Monitor::slotSwitchFullScreen()
 {
     m_videoBox->switchFullScreen();
@@ -587,9 +594,9 @@ bool Monitor::isActive() const
     return m_monitorManager->isActive(m_name);
 }
 
-void Monitor::activateMonitor()
+bool Monitor::activateMonitor()
 {
-    m_monitorManager->activateMonitor(m_name);
+    return m_monitorManager->activateMonitor(m_name);
 }
 
 void Monitor::setTimePos(const QString &pos)
@@ -605,8 +612,8 @@ void Monitor::slotSeek()
 
 void Monitor::slotSeek(int pos)
 {
-    //activateMonitor();
     if (render == NULL) return;
+    activateMonitor();
     render->seekToFrame(pos);
 }
 
@@ -732,15 +739,18 @@ void Monitor::stop()
 
 void Monitor::start()
 {
-    if (render && (m_name != "clip" || m_currentClip != NULL)) render->start();
+    if (!isVisible()) return;
+    if (render) render->start();
     connect(render, SIGNAL(rendererPosition(int)), this, SLOT(seekCursor(int)));
 }
 
 void Monitor::refreshMonitor(bool visible)
 {
     if (visible && render) {
-        activateMonitor();
-        render->doRefresh(); //askForRefresh();
+        if (!activateMonitor()) {
+            // the monitor was already active, simply refreshClipThumbnail
+            render->doRefresh();
+        }
     }
 }
 
@@ -764,7 +774,7 @@ void Monitor::slotPlay()
 {
     if (render == NULL) return;
     activateMonitor();
-    if (render->playSpeed() == 0) {
+    if (render->playSpeed() == 0.0) {
         m_playAction->setIcon(m_pauseIcon);
         render->switchPlay(true);
     } else {
@@ -806,7 +816,7 @@ void Monitor::slotLoopClip()
 void Monitor::updateClipProducer(Mlt::Producer *prod)
 {
     if (render == NULL) return;
-    render->setProducer(prod, render->seekFramePosition());
+   render->setProducer(prod, render->seekFramePosition());
 }
 
 void Monitor::slotSetClipProducer(DocClipBase *clip, QPoint zone, int position)
@@ -819,6 +829,7 @@ void Monitor::slotSetClipProducer(DocClipBase *clip, QPoint zone, int position)
         render->setProducer(NULL, -1);
         return;
     }
+    
     if (clip != m_currentClip) {
         m_currentClip = clip;
         if (m_currentClip) activateMonitor();
@@ -1051,12 +1062,6 @@ void MonitorRefresh::setRenderer(Render* render)
 }
 
 
-void MonitorRefresh::resizeEvent(QResizeEvent *event)
-{
-    Q_UNUSED(event);
-    if (m_renderer) m_renderer->doRefresh();
-}
-
 Overlay::Overlay(QWidget* parent) :
     QLabel(parent)
 {