]> git.sesse.net Git - kdenlive/commitdiff
Fix recent freeze on transition select
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 17 Nov 2012 21:51:24 +0000 (22:51 +0100)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 17 Nov 2012 21:51:24 +0000 (22:51 +0100)
src/customtrackview.cpp

index 28a275d4f5e599a96d77a8f2cbce09fdab6441b4..ebeb71946c1f5c3ac2303570b9d0b24888520f70 100644 (file)
@@ -818,8 +818,10 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event)
     while (!m_dragGuide && ct < collisionList.count()) {
         if (collisionList.at(ct)->type() == AVWIDGET || collisionList.at(ct)->type() == TRANSITIONWIDGET) {
             collisionClip = static_cast <AbstractClipItem *>(collisionList.at(ct));
-            if (collisionClip->isItemLocked() || !collisionClip->isEnabled())
+            if (collisionClip->isItemLocked() || !collisionClip->isEnabled()) {
+               ct++;
                 continue;
+           }
             if (collisionClip == m_dragItem) {
                 collisionClip = NULL;
            }
@@ -843,6 +845,7 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event)
         if (m_dragItem) emit clipItemSelected(NULL);
         m_dragItem = NULL;
     }
+
 #if QT_VERSION >= 0x040800
     // Add shadow to dragged item, currently disabled because of painting artifacts
     /*if (m_dragItem) {
@@ -852,12 +855,25 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event)
        m_dragItem->setGraphicsEffect(eff);
     }*/
 #endif
-    if (m_dragItem && m_dragItem->type() == TRANSITIONWIDGET) {
+    if (m_dragItem && m_dragItem->type() == TRANSITIONWIDGET && m_dragItem->isEnabled()) {
         // update transition menu action
         m_autoTransition->setChecked(static_cast<Transition *>(m_dragItem)->isAutomatic());
         m_autoTransition->setEnabled(true);
-    } else m_autoTransition->setEnabled(false);
-
+       // A transition is selected
+        QPoint p;
+        ClipItem *transitionClip = getClipItemAt(m_dragItemInfo.startPos, m_dragItemInfo.track);
+        if (transitionClip && transitionClip->baseClip()) {
+            QString size = transitionClip->baseClip()->getProperty("frame_size");
+            double factor = transitionClip->baseClip()->getProperty("aspect_ratio").toDouble();
+            if (factor == 0) factor = 1.0;
+            p.setX((int)(size.section('x', 0, 0).toInt() * factor + 0.5));
+            p.setY(size.section('x', 1, 1).toInt());
+        }
+        emit transitionItemSelected(static_cast <Transition *>(m_dragItem), getPreviousVideoTrack(m_dragItem->track()), p);
+    } else {
+       emit transitionItemSelected(NULL);
+       m_autoTransition->setEnabled(false);
+    }
     // context menu requested
     if (event->button() == Qt::RightButton) {
         if (!m_dragItem && !m_dragGuide) {
@@ -1181,7 +1197,6 @@ void CustomTrackView::mousePressEvent(QMouseEvent * event)
         resetSelectionGroup(false);
         m_dragItem->setSelected(true);
     }
-
     m_blockRefresh = false;
 }
 
@@ -4096,19 +4111,6 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event)
         updateEffect(m_document->tracksCount() - item->track(), item->startPos(), item->selectedEffect());
         emit clipItemSelected(item);
     }
-    if (m_dragItem && m_dragItem->type() == TRANSITIONWIDGET && m_dragItem->isSelected() && m_dragItem->isEnabled()) {
-        // A transition is selected
-        QPoint p;
-        ClipItem *transitionClip = getClipItemAt(m_dragItemInfo.startPos, m_dragItemInfo.track);
-        if (transitionClip && transitionClip->baseClip()) {
-            QString size = transitionClip->baseClip()->getProperty("frame_size");
-            double factor = transitionClip->baseClip()->getProperty("aspect_ratio").toDouble();
-            if (factor == 0) factor = 1.0;
-            p.setX((int)(size.section('x', 0, 0).toInt() * factor + 0.5));
-            p.setY(size.section('x', 1, 1).toInt());
-        }
-        emit transitionItemSelected(static_cast <Transition *>(m_dragItem), getPreviousVideoTrack(m_dragItem->track()), p);
-    } else emit transitionItemSelected(NULL);
     if (m_operationMode != NONE && m_operationMode != MOVE) setDocumentModified();
     m_operationMode = NONE;
 }