]> git.sesse.net Git - kdenlive/commitdiff
Improve handling of groups when locking tracks
authorTill Theato <root@ttill.de>
Tue, 21 Sep 2010 18:20:32 +0000 (18:20 +0000)
committerTill Theato <root@ttill.de>
Tue, 21 Sep 2010 18:20:32 +0000 (18:20 +0000)
svn path=/trunk/kdenlive/; revision=4920

src/customtrackview.cpp

index 12b3d4245fd0c1e8525a4a11e7ec307dc627e6db..28f0c695766f6429fd451203679ba93f69629a8e 100644 (file)
@@ -2696,7 +2696,13 @@ void CustomTrackView::lockTrack(int ix, bool lock, bool requestUpdate)
 
     for (int i = 0; i < selection.count(); i++) {
         if (selection.at(i)->type() == GROUPWIDGET && (AbstractGroupItem *)selection.at(i) != m_selectionGroup) {
+            if (selection.at(i)->parentItem() && m_selectionGroup) {
+                selection.removeAll((QGraphicsItem*)m_selectionGroup);
+                resetSelectionGroup();
+            }
+
             bool changeGroupLock = true;
+            bool hasClipOnTrack = false;
             QList <QGraphicsItem *> children =  selection.at(i)->childItems();
             for (int j = 0; j < children.count(); ++j) {
                 if (children.at(j)->isSelected()) {
@@ -2711,14 +2717,28 @@ void CustomTrackView::lockTrack(int ix, bool lock, bool requestUpdate)
                 AbstractClipItem * child = static_cast <AbstractClipItem *>(children.at(j));
                 if (child == m_dragItem)
                     m_dragItem = NULL;
-                
+
                 // only unlock group, if it is not locked by another track too
                 if (!lock && child->track() != ix && m_document->trackInfoAt(m_document->tracksCount() - child->track() - 1).isLocked)
                     changeGroupLock = false;
+                
+                // only (un-)lock if at least one clip is on the track
+                if (child->track() == ix)
+                    hasClipOnTrack = true;
             }
-            if (changeGroupLock)
+            if (changeGroupLock && hasClipOnTrack)
                 ((AbstractGroupItem*)selection.at(i))->setItemLocked(lock);
-        } else if(selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET) {
+        } else if((selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET)) {
+            if (selection.at(i)->parentItem()) {
+                if (selection.at(i)->parentItem() == m_selectionGroup) {
+                    selection.removeAll((QGraphicsItem*)m_selectionGroup);
+                    resetSelectionGroup();
+                } else {
+                    // groups are handled separately
+                    continue;
+                }
+            }
+
             if (selection.at(i)->isSelected()) {
                 if (selection.at(i)->type() == AVWIDGET)
                     emit clipItemSelected(NULL);