X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fcustomtrackview.cpp;h=12b3d4245fd0c1e8525a4a11e7ec307dc627e6db;hb=17e2a7534690a9f99adf6a3e27d4952d47bd1ce5;hp=429ce27297751df61c296a5711d5485ad2772a05;hpb=6888216a9e65c99e6e522871852f9f60518ddb07;p=kdenlive diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index 429ce272..12b3d424 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -2695,15 +2695,41 @@ void CustomTrackView::lockTrack(int ix, bool lock, bool requestUpdate) QList selection = m_scene->items(0, ix * m_tracksHeight + m_tracksHeight / 2, sceneRect().width(), m_tracksHeight / 2 - 2); for (int i = 0; i < selection.count(); i++) { - if (selection.at(i)->type() != AVWIDGET && selection.at(i)->type() != TRANSITIONWIDGET) continue; - if (selection.at(i)->isSelected()) { - if (selection.at(i)->type() == AVWIDGET) emit clipItemSelected(NULL); - else emit transitionItemSelected(NULL); - } - clip = static_cast (selection.at(i)); - clip->setItemLocked(lock); - if (clip == m_dragItem) - m_dragItem = NULL; + if (selection.at(i)->type() == GROUPWIDGET && (AbstractGroupItem *)selection.at(i) != m_selectionGroup) { + bool changeGroupLock = true; + QList children = selection.at(i)->childItems(); + for (int j = 0; j < children.count(); ++j) { + if (children.at(j)->isSelected()) { + if (children.at(j)->type() == AVWIDGET) + emit clipItemSelected(NULL); + else if (children.at(j)->type() == TRANSITIONWIDGET) + emit transitionItemSelected(NULL); + else + continue; + } + + AbstractClipItem * child = static_cast (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; + } + if (changeGroupLock) + ((AbstractGroupItem*)selection.at(i))->setItemLocked(lock); + } else if(selection.at(i)->type() == AVWIDGET || selection.at(i)->type() == TRANSITIONWIDGET) { + if (selection.at(i)->isSelected()) { + if (selection.at(i)->type() == AVWIDGET) + emit clipItemSelected(NULL); + else + emit transitionItemSelected(NULL); + } + clip = static_cast (selection.at(i)); + clip->setItemLocked(lock); + if (clip == m_dragItem) + m_dragItem = NULL; + } } kDebug() << "NEXT TRK STATE: " << m_document->trackInfoAt(tracknumber).isLocked; viewport()->update();