From: Jean-Baptiste Mardelle Date: Thu, 13 Sep 2012 07:46:06 +0000 (+0200) Subject: Try to fix corruption after using spacer tool: X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=4b7a253243e83e6a743a77cbf90c3aa33e45b4c7;p=kdenlive Try to fix corruption after using spacer tool: http://kdenlive.org/mantis/view.php?id=2726 --- diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index f67d893d..896a7576 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -3440,6 +3440,7 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) track = -1; } else track = (int)(mapToScene(m_clickEvent).y() / m_tracksHeight); GenTime timeOffset = GenTime((int)(m_selectionGroup->scenePos().x()), m_document->fps()) - m_selectionGroupInfo.startPos; + QList groups; if (timeOffset != GenTime()) { QList items = m_selectionGroup->childItems(); @@ -3457,8 +3458,11 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) } for (int i = 0; i < items.count(); i++) { - if (items.at(i)->type() == GROUPWIDGET) - items += items.at(i)->childItems(); + if (items.at(i)->type() == GROUPWIDGET) { + AbstractGroupItem* group = (AbstractGroupItem*)items.at(i); + if (!groups.contains(group)) groups.append(group); + items += items.at(i)->childItems(); + } } for (int i = 0; i < items.count(); i++) { @@ -3488,7 +3492,13 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) setDocumentModified(); } } - resetSelectionGroup(false); + for (int i = 0; i < groups.count(); i++) + rebuildGroup(groups.at(i)); + + resetSelectionGroup(); + + clearSelection(); + m_operationMode = NONE; } else if (m_operationMode == RUBBERSELECTION) { resetSelectionGroup(); @@ -3662,7 +3672,6 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) else group = static_cast (m_dragItem->parentItem()); QList items = group->childItems(); - QList clipsToMove; QList transitionsToMove; @@ -3746,13 +3755,19 @@ void CustomTrackView::mouseReleaseEvent(QMouseEvent * event) m_selectionGroupInfo.startPos = GenTime(m_selectionGroup->scenePos().x(), m_document->fps()); m_selectionGroupInfo.track = m_selectionGroup->track(); + QList groupList; for (int i = 0; i < items.count(); ++i) { if (items.at(i)->type() == GROUPWIDGET) { - rebuildGroup((AbstractGroupItem*)items.at(i)); + AbstractGroupItem* group = (AbstractGroupItem*)items.at(i); + if (!groupList.contains(group)) groupList.append(group); items.removeAt(i); --i; } } + for (int i = 0; i < groupList.count(); ++i) { + rebuildGroup(groupList.at(i)); + } + for (int i = 0; i < items.count(); ++i) { if (items.at(i)) { items.at(i)->setSelected(true); @@ -4597,6 +4612,7 @@ void CustomTrackView::moveGroup(QList startClip, QList sta //m_selectionGroup->moveBy(offset.frames(m_document->fps()), trackOffset *(qreal) m_tracksHeight); QList children = m_selectionGroup->childItems(); + QList groupList; // Expand groups int max = children.count(); for (int i = 0; i < max; i++) { @@ -4606,6 +4622,8 @@ void CustomTrackView::moveGroup(QList startClip, QList sta //grp->moveBy(offset.frames(m_document->fps()), trackOffset *(qreal) m_tracksHeight); /*m_document->clipManager()->removeGroup(grp); m_scene->destroyItemGroup(grp);*/ + AbstractGroupItem *group = (AbstractGroupItem*) children.at(i); + if (!groupList.contains(group)) groupList.append(group); children.removeAll(children.at(i)); i--; } @@ -4647,11 +4665,9 @@ void CustomTrackView::moveGroup(QList startClip, QList sta } resetSelectionGroup(false); + for (int i = 0; i < groupList.count(); i++) + rebuildGroup(groupList.at(i)); - for (int i = 0; i < children.count(); i++) { - if (children.at(i)->parentItem()) - rebuildGroup((AbstractGroupItem*)children.at(i)->parentItem()); - } clearSelection(); KdenliveSettings::setSnaptopoints(snap); @@ -5870,12 +5886,10 @@ void CustomTrackView::setInPoint() QUndoCommand *resizeCommand = new QUndoCommand(); resizeCommand->setText(i18n("Resize group")); QList items = parent->childItems(); - int itemcount = 0; for (int i = 0; i < items.count(); ++i) { AbstractClipItem *item = static_cast(items.at(i)); if (item && item->type() == AVWIDGET) { prepareResizeClipStart(item, item->info(), m_cursorPos, true, resizeCommand); - ++itemcount; } } if (resizeCommand->childCount() > 0) m_commandStack->push(resizeCommand); @@ -5904,12 +5918,10 @@ void CustomTrackView::setOutPoint() QUndoCommand *resizeCommand = new QUndoCommand(); resizeCommand->setText(i18n("Resize group")); QList items = parent->childItems(); - int itemcount = 0; for (int i = 0; i < items.count(); ++i) { AbstractClipItem *item = static_cast(items.at(i)); if (item && item->type() == AVWIDGET) { prepareResizeClipEnd(item, item->info(), m_cursorPos, true, resizeCommand); - ++itemcount; } } if (resizeCommand->childCount() > 0) m_commandStack->push(resizeCommand);