/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
+** Contact: http://www.qt-project.org/
**
** This file is part of the test suite of the Qt Toolkit.
**
**
**
**
+**
** $QT_END_LICENSE$
**
****************************************************************************/
virtual void focusOutEvent(QFocusEvent *) { Q_ASSERT(focused); focused = false; }
virtual void mousePressEvent(QMouseEvent *event) { event->accept(); ++pressCount; }
virtual void mouseReleaseEvent(QMouseEvent *event) { event->accept(); ++releaseCount; }
+ virtual void touchEvent(QTouchEvent *event) { event->accept(); }
virtual void wheelEvent(QWheelEvent *event) { event->accept(); ++wheelCount; }
};
+class TestCanvas: public QQuickCanvas
+{
+public:
+ TestCanvas()
+ : QQuickCanvas()
+ {}
+
+ virtual bool event(QEvent *event)
+ {
+ return QQuickCanvas::event(event);
+ }
+};
+
class TestPolishItem : public QQuickItem
{
Q_OBJECT
public:
- TestPolishItem(QQuickItem *parent)
+ TestPolishItem(QQuickItem *parent = 0)
: QQuickItem(parent), wasPolished(false) {
- QTimer::singleShot(10, this, SLOT(doPolish()));
+
}
bool wasPolished;
public:
private slots:
+ void initTestCase();
+
void noCanvas();
void simpleFocus();
void scopedFocus();
void enabled();
void mouseGrab();
+ void touchEventAccept();
void polishOutsideAnimation();
+ void polishOnCompleted();
void wheelEvent_data();
void wheelEvent();
}
};
+void tst_qquickitem::initTestCase()
+{
+ QDeclarativeDataTest::initTestCase();
+ qmlRegisterType<TestPolishItem>("Qt.test", 1, 0, "TestPolishItem");
+}
+
// Focus has no effect when outside a canvas
void tst_qquickitem::noCanvas()
{
delete canvas;
}
+void tst_qquickitem::touchEventAccept()
+{
+ TestCanvas *canvas = new TestCanvas;
+ canvas->resize(100, 100);
+ canvas->show();
+
+ TestItem *item = new TestItem;
+ item->setSize(QSizeF(100, 100));
+ item->setParentItem(canvas->rootItem());
+
+ static QTouchDevice* device = new QTouchDevice;
+ device->setType(QTouchDevice::TouchScreen);
+ QWindowSystemInterface::registerTouchDevice(device);
+
+ QTouchEvent *event = new QTouchEvent(QEvent::TouchBegin, device);
+
+ bool accepted = canvas->event(event);
+
+ QVERIFY(accepted && event->isAccepted());
+
+ delete event;
+ delete item;
+ delete canvas;
+}
+
void tst_qquickitem::polishOutsideAnimation()
{
QQuickCanvas *canvas = new QQuickCanvas;
TestPolishItem *item = new TestPolishItem(canvas->rootItem());
item->setSize(QSizeF(200, 100));
QTest::qWait(50);
+
+ QTimer::singleShot(10, item, SLOT(doPolish()));
QTRY_VERIFY(item->wasPolished);
delete item;
delete canvas;
}
+void tst_qquickitem::polishOnCompleted()
+{
+ QQuickView *view = new QQuickView;
+ view->setSource(testFileUrl("polishOnCompleted.qml"));
+ view->show();
+
+ TestPolishItem *item = qobject_cast<TestPolishItem*>(view->rootObject());
+ QVERIFY(item);
+
+#ifdef Q_OS_MAC
+ QSKIP("QTBUG-21590 view does not reliably receive polish without a running animation");
+#endif
+
+ QTRY_VERIFY(item->wasPolished);
+
+ delete view;
+}
+
void tst_qquickitem::wheelEvent_data()
{
QTest::addColumn<bool>("visible");