diff options
-rw-r--r-- | src/quick/items/qquickview.cpp | 2 | ||||
-rw-r--r-- | src/quick/items/qquickwindowmodule.cpp | 3 | ||||
-rw-r--r-- | tests/auto/quick/qquickwindow/data/grabContentItemToImage.qml | 15 | ||||
-rw-r--r-- | tests/auto/quick/qquickwindow/qquickwindow.pro | 3 | ||||
-rw-r--r-- | tests/auto/quick/qquickwindow/tst_qquickwindow.cpp | 19 |
5 files changed, 41 insertions, 1 deletions
diff --git a/src/quick/items/qquickview.cpp b/src/quick/items/qquickview.cpp index 573440ff7f..d7171bf910 100644 --- a/src/quick/items/qquickview.cpp +++ b/src/quick/items/qquickview.cpp @@ -62,6 +62,8 @@ void QQuickViewPrivate::init(QQmlEngine* e) if (engine.isNull()) engine = new QQmlEngine(q); + QQmlEngine::setContextForObject(contentItem, engine.data()->rootContext()); + if (!engine.data()->incubationController()) engine.data()->setIncubationController(q->incubationController()); diff --git a/src/quick/items/qquickwindowmodule.cpp b/src/quick/items/qquickwindowmodule.cpp index ea1fc2f106..42313e4584 100644 --- a/src/quick/items/qquickwindowmodule.cpp +++ b/src/quick/items/qquickwindowmodule.cpp @@ -102,6 +102,9 @@ void QQuickWindowQmlImpl::classBegin() { Q_D(QQuickWindowQmlImpl); QQmlEngine* e = qmlEngine(this); + + QQmlEngine::setContextForObject(contentItem(), e->rootContext()); + //Give QQuickView behavior when created from QML with QQmlApplicationEngine if (QCoreApplication::instance()->property("__qml_using_qqmlapplicationengine") == QVariant(true)) { if (e && !e->incubationController()) diff --git a/tests/auto/quick/qquickwindow/data/grabContentItemToImage.qml b/tests/auto/quick/qquickwindow/data/grabContentItemToImage.qml new file mode 100644 index 0000000000..9086e0cc84 --- /dev/null +++ b/tests/auto/quick/qquickwindow/data/grabContentItemToImage.qml @@ -0,0 +1,15 @@ +import QtQuick 2.0 +import QtQuick.Window 2.2 as Window + +Window.Window { + visible: true + width: 100 + height: 100 + property int success: 0 + + function grabContentItemToImage() { + contentItem.grabToImage(function (image) { + success = 1 + }) + } +} diff --git a/tests/auto/quick/qquickwindow/qquickwindow.pro b/tests/auto/quick/qquickwindow/qquickwindow.pro index 05093ba8e0..b0a5f97a32 100644 --- a/tests/auto/quick/qquickwindow/qquickwindow.pro +++ b/tests/auto/quick/qquickwindow/qquickwindow.pro @@ -16,4 +16,5 @@ OTHER_FILES += \ data/AnimationsWhileHidden.qml \ data/Headless.qml \ data/showHideAnimate.qml \ - data/windoworder.qml + data/windoworder.qml \ + data/grabContentItemToImage.qml diff --git a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp index 300ca392f9..dd00154935 100644 --- a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp +++ b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp @@ -370,6 +370,8 @@ private slots: void pointerEventTypeAndPointCount(); + void grabContentItemToImage(); + private: QTouchDevice *touchDevice; QTouchDevice *touchDeviceWithVelocity; @@ -2554,6 +2556,23 @@ void tst_qquickwindow::pointerEventTypeAndPointCount() QVERIFY(!pte.touchPointById(0)); } +void tst_qquickwindow::grabContentItemToImage() +{ + QQmlEngine engine; + QQmlComponent component(&engine); + component.loadUrl(testFileUrl("grabContentItemToImage.qml")); + + QObject *created = component.create(); + QScopedPointer<QObject> cleanup(created); + QVERIFY(created); + + QQuickWindow *window = qobject_cast<QQuickWindow *>(created); + QVERIFY(QTest::qWaitForWindowActive(window)); + + QMetaObject::invokeMethod(window, "grabContentItemToImage"); + QTRY_COMPARE(created->property("success").toInt(), 1); +} + QTEST_MAIN(tst_qquickwindow) #include "tst_qquickwindow.moc" |