Skip to content

Commit

Permalink
Avoid anchor/positioning loops
Browse files Browse the repository at this point in the history
Task-number: QTBUG-23740

Change-Id: I84922ac2dc6e499fc22b923298ca31eda382c622
Reviewed-by: Alan Alpert <alan.alpert@nokia.com>
  • Loading branch information
Alan Alpert authored and Qt by Nokia committed Jan 23, 2012
1 parent 599536d commit 4caff98
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 16 deletions.
18 changes: 11 additions & 7 deletions src/quick/items/qquickpositioners.cpp
Expand Up @@ -172,7 +172,6 @@ void QQuickBasePositioner::componentComplete()
QQuickItem::componentComplete();
positionedItems.reserve(childItems().count());
prePositioning();
reportConflictingAnchors();
}

void QQuickBasePositioner::itemChange(ItemChange change, const ItemChangeData &value)
Expand Down Expand Up @@ -239,8 +238,11 @@ void QQuickBasePositioner::prePositioning()
}
}
QSizeF contentSize(0,0);
doPositioning(&contentSize);
updateAttachedProperties();
reportConflictingAnchors();
if (!d->anchorConflict) {
doPositioning(&contentSize);
updateAttachedProperties();
}
if (!d->addActions.isEmpty() || !d->moveActions.isEmpty())
finishApplyTransitions();
d->doingPositioning = false;
Expand Down Expand Up @@ -574,7 +576,8 @@ void QQuickColumn::reportConflictingAnchors()
}
}
if (d->anchorConflict) {
qmlInfo(this) << "Cannot specify top, bottom, verticalCenter, fill or centerIn anchors for items inside Column";
qmlInfo(this) << "Cannot specify top, bottom, verticalCenter, fill or centerIn anchors for items inside Column."
<< " Column will not function.";
}
}
/*!
Expand Down Expand Up @@ -800,7 +803,8 @@ void QQuickRow::reportConflictingAnchors()
}
}
if (d->anchorConflict)
qmlInfo(this) << "Cannot specify left, right, horizontalCenter, fill or centerIn anchors for items inside Row";
qmlInfo(this) << "Cannot specify left, right, horizontalCenter, fill or centerIn anchors for items inside Row."
<< " Row will not function.";
}

/*!
Expand Down Expand Up @@ -1234,7 +1238,7 @@ void QQuickGrid::reportConflictingAnchors()
}
}
if (d->anchorConflict)
qmlInfo(this) << "Cannot specify anchors for items inside Grid";
qmlInfo(this) << "Cannot specify anchors for items inside Grid." << " Grid will not function.";
}

/*!
Expand Down Expand Up @@ -1526,7 +1530,7 @@ void QQuickFlow::reportConflictingAnchors()
}
}
if (d->anchorConflict)
qmlInfo(this) << "Cannot specify anchors for items inside Flow";
qmlInfo(this) << "Cannot specify anchors for items inside Flow." << " Flow will not function.";
}

QT_END_NAMESPACE
2 changes: 1 addition & 1 deletion tests/auto/qtquick2/qquickanchors/tst_qquickanchors.cpp
Expand Up @@ -482,7 +482,7 @@ void tst_qquickanchors::crash1()
{
QUrl source(testFileUrl("crash1.qml"));

QString expect = source.toString() + ":3:1: QML Column: Cannot specify top, bottom, verticalCenter, fill or centerIn anchors for items inside Column";
QString expect = source.toString() + ":3:1: QML Column: Cannot specify top, bottom, verticalCenter, fill or centerIn anchors for items inside Column. Column will not function.";

QTest::ignoreMessage(QtWarningMsg, expect.toLatin1());

Expand Down
16 changes: 8 additions & 8 deletions tests/auto/qtquick2/qquickpositioners/tst_qquickpositioners.cpp
Expand Up @@ -1206,14 +1206,14 @@ void tst_qquickpositioners::test_conflictinganchors()
component.setData("import QtQuick 2.0\nColumn { Item { anchors.top: parent.top } }", QUrl::fromLocalFile(""));
item = qobject_cast<QQuickItem*>(component.create());
QVERIFY(item);
QCOMPARE(warningMessage, QString("file::2:1: QML Column: Cannot specify top, bottom, verticalCenter, fill or centerIn anchors for items inside Column"));
QCOMPARE(warningMessage, QString("file::2:1: QML Column: Cannot specify top, bottom, verticalCenter, fill or centerIn anchors for items inside Column. Column will not function."));
warningMessage.clear();
delete item;

component.setData("import QtQuick 2.0\nColumn { Item { anchors.centerIn: parent } }", QUrl::fromLocalFile(""));
item = qobject_cast<QQuickItem*>(component.create());
QVERIFY(item);
QCOMPARE(warningMessage, QString("file::2:1: QML Column: Cannot specify top, bottom, verticalCenter, fill or centerIn anchors for items inside Column"));
QCOMPARE(warningMessage, QString("file::2:1: QML Column: Cannot specify top, bottom, verticalCenter, fill or centerIn anchors for items inside Column. Column will not function."));
warningMessage.clear();
delete item;

Expand All @@ -1227,14 +1227,14 @@ void tst_qquickpositioners::test_conflictinganchors()
component.setData("import QtQuick 2.0\nRow { Item { anchors.left: parent.left } }", QUrl::fromLocalFile(""));
item = qobject_cast<QQuickItem*>(component.create());
QVERIFY(item);
QCOMPARE(warningMessage, QString("file::2:1: QML Row: Cannot specify left, right, horizontalCenter, fill or centerIn anchors for items inside Row"));
QCOMPARE(warningMessage, QString("file::2:1: QML Row: Cannot specify left, right, horizontalCenter, fill or centerIn anchors for items inside Row. Row will not function."));
warningMessage.clear();
delete item;

component.setData("import QtQuick 2.0\nRow { Item { anchors.fill: parent } }", QUrl::fromLocalFile(""));
item = qobject_cast<QQuickItem*>(component.create());
QVERIFY(item);
QCOMPARE(warningMessage, QString("file::2:1: QML Row: Cannot specify left, right, horizontalCenter, fill or centerIn anchors for items inside Row"));
QCOMPARE(warningMessage, QString("file::2:1: QML Row: Cannot specify left, right, horizontalCenter, fill or centerIn anchors for items inside Row. Row will not function."));
warningMessage.clear();
delete item;

Expand All @@ -1248,27 +1248,27 @@ void tst_qquickpositioners::test_conflictinganchors()
component.setData("import QtQuick 2.0\nGrid { Item { anchors.horizontalCenter: parent.horizontalCenter } }", QUrl::fromLocalFile(""));
item = qobject_cast<QQuickItem*>(component.create());
QVERIFY(item);
QCOMPARE(warningMessage, QString("file::2:1: QML Grid: Cannot specify anchors for items inside Grid"));
QCOMPARE(warningMessage, QString("file::2:1: QML Grid: Cannot specify anchors for items inside Grid. Grid will not function."));
warningMessage.clear();
delete item;

component.setData("import QtQuick 2.0\nGrid { Item { anchors.centerIn: parent } }", QUrl::fromLocalFile(""));
item = qobject_cast<QQuickItem*>(component.create());
QVERIFY(item);
QCOMPARE(warningMessage, QString("file::2:1: QML Grid: Cannot specify anchors for items inside Grid"));
QCOMPARE(warningMessage, QString("file::2:1: QML Grid: Cannot specify anchors for items inside Grid. Grid will not function."));
warningMessage.clear();
delete item;

component.setData("import QtQuick 2.0\nFlow { Item { anchors.verticalCenter: parent.verticalCenter } }", QUrl::fromLocalFile(""));
item = qobject_cast<QQuickItem*>(component.create());
QVERIFY(item);
QCOMPARE(warningMessage, QString("file::2:1: QML Flow: Cannot specify anchors for items inside Flow"));
QCOMPARE(warningMessage, QString("file::2:1: QML Flow: Cannot specify anchors for items inside Flow. Flow will not function."));
delete item;

component.setData("import QtQuick 2.0\nFlow { Item { anchors.fill: parent } }", QUrl::fromLocalFile(""));
item = qobject_cast<QQuickItem*>(component.create());
QVERIFY(item);
QCOMPARE(warningMessage, QString("file::2:1: QML Flow: Cannot specify anchors for items inside Flow"));
QCOMPARE(warningMessage, QString("file::2:1: QML Flow: Cannot specify anchors for items inside Flow. Flow will not function."));
qInstallMsgHandler(oldMsgHandler);
delete item;
}
Expand Down

0 comments on commit 4caff98

Please sign in to comment.