aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquickitem
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@digia.com>2014-02-19 16:35:15 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-20 21:25:32 +0100
commit43f983350a548b1b663ea07a0e87e4cc58834214 (patch)
treef0ef7245257cfd3e414c99de9e88904689f7aba3 /tests/auto/quick/qquickitem
parent487d72488cf9d86b1aed352a0cfe1c4f7274099d (diff)
Fix item polishing
After "Dont call updatePolish if an item is not visible" (439f31f) and "Fix polishItems bug" (01e609e), desktop style animations for QtQuick Controls were no longer running. This was because QQuickItem::polish() no longer polished a _visible_ item when there were other _hidden_ items in the queue to be polished. This change restores the old logic that QQuickWindow only keeps track of visible items to be polished, whilst the idea of hidden items not being polished still remains valid. QQuickItem is made responsible for polishing itself if necessary when it becomes visible. Task-number: QTBUG-36934 Change-Id: I4d48d3a3e2c841d337cd52ec4fd27092f84a8626 Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
Diffstat (limited to 'tests/auto/quick/qquickitem')
-rw-r--r--tests/auto/quick/qquickitem/tst_qquickitem.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/auto/quick/qquickitem/tst_qquickitem.cpp b/tests/auto/quick/qquickitem/tst_qquickitem.cpp
index f4f2374183..efe9266d0a 100644
--- a/tests/auto/quick/qquickitem/tst_qquickitem.cpp
+++ b/tests/auto/quick/qquickitem/tst_qquickitem.cpp
@@ -40,11 +40,13 @@
****************************************************************************/
#include <qtest.h>
+#include <qsignalspy.h>
#include <QtQuick/qquickitem.h>
#include <QtQuick/qquickwindow.h>
#include <QtQuick/qquickview.h>
#include "private/qquickfocusscope_p.h"
+#include "private/qquickwindow_p.h"
#include "private/qquickitem_p.h"
#include <qpa/qwindowsysteminterface.h>
#include <QDebug>
@@ -156,6 +158,8 @@ private slots:
void touchEventAcceptIgnore();
void polishOutsideAnimation();
void polishOnCompleted();
+ void polishLaterWhenVisible();
+ void polishWhenOtherHidden();
void wheelEvent_data();
void wheelEvent();
@@ -1396,6 +1400,63 @@ void tst_qquickitem::polishOnCompleted()
QTRY_VERIFY(item->wasPolished);
}
+void tst_qquickitem::polishLaterWhenVisible()
+{
+ QQuickWindow window;
+ QQuickWindowPrivate *wp = QQuickWindowPrivate::get(&window);
+ window.resize(200, 200);
+ window.show();
+ QTest::qWaitForWindowExposed(&window);
+
+ TestPolishItem *item = new TestPolishItem(window.contentItem());
+ item->setSize(QSizeF(200, 100));
+ item->setVisible(false);
+ item->polish();
+
+ QVERIFY(!wp->itemsToPolish.contains(item));
+ window.grabWindow(); // trigger QQuickWindowPrivate::polishItems()
+ QVERIFY(!item->wasPolished);
+
+ item->setVisible(true);
+ QVERIFY(wp->itemsToPolish.contains(item));
+ window.grabWindow(); // trigger QQuickWindowPrivate::polishItems()
+ QVERIFY(item->wasPolished);
+ QVERIFY(!wp->itemsToPolish.contains(item));
+}
+
+void tst_qquickitem::polishWhenOtherHidden()
+{
+ QQuickWindow window;
+ QQuickWindowPrivate *wp = QQuickWindowPrivate::get(&window);
+ window.resize(200, 200);
+ window.show();
+ QTest::qWaitForWindowExposed(&window);
+
+ // a hidden item pending for polish...
+ TestPolishItem *hiddenItem = new TestPolishItem(window.contentItem());
+ hiddenItem->setSize(QSizeF(200, 100));
+ hiddenItem->setVisible(false);
+ hiddenItem->polish();
+
+ QVERIFY(!wp->itemsToPolish.contains(hiddenItem));
+ window.grabWindow(); // trigger QQuickWindowPrivate::polishItems()
+ QVERIFY(!hiddenItem->wasPolished);
+
+ // ...should not block a visible item from being polished
+ TestPolishItem *visibleItem = new TestPolishItem(window.contentItem());
+ visibleItem->setSize(QSizeF(200, 100));
+ visibleItem->setVisible(true);
+ visibleItem->polish();
+
+ QVERIFY(wp->itemsToPolish.contains(visibleItem));
+ QVERIFY(!wp->itemsToPolish.contains(hiddenItem));
+ window.grabWindow(); // trigger QQuickWindowPrivate::polishItems()
+ QVERIFY(visibleItem->wasPolished);
+ QVERIFY(!hiddenItem->wasPolished);
+ QVERIFY(!wp->itemsToPolish.contains(visibleItem));
+ QVERIFY(!wp->itemsToPolish.contains(hiddenItem));
+}
+
void tst_qquickitem::wheelEvent_data()
{
QTest::addColumn<bool>("visible");