- if (force || selection.count() > 1) {
- bool snap = KdenliveSettings::snaptopoints();
- KdenliveSettings::setSnaptopoints(false);
- if (createNewGroup) {
- AbstractGroupItem *newGroup = m_document->clipManager()->createGroup();
- newGroup->setPos(rectUnion.left(), rectUnion.top() - 1);
- QPointF diff = newGroup->pos();
- newGroup->translate(-diff.x(), -diff.y());
- //newGroup->translate((int) -rectUnion.left(), (int) -rectUnion.top() + 1);
-
- scene()->addItem(newGroup);
-
- // Check if we are trying to include a group in a group
- QList <AbstractGroupItem *> groups;
- for (int i = 0; i < selection.count(); i++) {
- if (selection.at(i)->type() == GROUPWIDGET && !groups.contains(static_cast<AbstractGroupItem *>(selection.at(i))))
- groups.append(static_cast<AbstractGroupItem *>(selection.at(i)));
- else if (selection.at(i)->parentItem() && !groups.contains(static_cast<AbstractGroupItem *>(selection.at(i)->parentItem())))
- groups.append(static_cast<AbstractGroupItem *>(selection.at(i)->parentItem()));
- }
- if (!groups.isEmpty()) {
- // ungroup previous groups
- while (!groups.isEmpty()) {
- AbstractGroupItem *grp = groups.takeFirst();
- m_document->clipManager()->removeGroup(grp);
- scene()->destroyItemGroup(grp);
- }
- selection = m_scene->selectedItems();
- }
+ QRectF rectUnion;
+ // Find top left position of selection
+ foreach (const QGraphicsItemGroup *value, groupsList) {
+ rectUnion = rectUnion.united(value->sceneBoundingRect());
+ }
+ foreach (const QGraphicsItem *value, itemsList) {
+ rectUnion = rectUnion.united(value->sceneBoundingRect());
+ }
+ bool snap = KdenliveSettings::snaptopoints();
+ KdenliveSettings::setSnaptopoints(false);
+ if (createNewGroup) {
+ AbstractGroupItem *newGroup = m_document->clipManager()->createGroup();
+ newGroup->setPos(rectUnion.left(), rectUnion.top() - 1);
+ QPointF diff = newGroup->pos();
+ newGroup->translate(-diff.x(), -diff.y());
+ //newGroup->translate((int) -rectUnion.left(), (int) -rectUnion.top() + 1);
+
+ scene()->addItem(newGroup);
+ // Check if we are trying to include a group in a group
+ foreach (QGraphicsItemGroup *value, groupsList) {
+ QList<QGraphicsItem *> children = value->childItems();
+ for (int i = 0; i < children.count(); i++) {
+ if (children.at(i)->type() == AVWIDGET || children.at(i)->type() == TRANSITIONWIDGET)
+ itemsList.insert(children.at(i));
+ }
+ AbstractGroupItem *grp = static_cast<AbstractGroupItem *>(value);
+ m_document->clipManager()->removeGroup(grp);
+ scene()->destroyItemGroup(grp);
+ }