void tst_applicationwindow::defaultFocus() { QQmlEngine engine; QQmlComponent component(&engine); component.loadUrl(testFileUrl("defaultFocus.qml")); QObject* created = component.create(); QScopedPointer<QObject> cleanup(created); Q_UNUSED(cleanup); QVERIFY(created); QQuickWindow* window = qobject_cast<QQuickWindow*>(created); QVERIFY(window); window->show(); window->requestActivate(); QVERIFY(QTest::qWaitForWindowActive(window)); QVERIFY(QGuiApplication::focusWindow() == window); QQuickItem* contentItem = window->contentItem(); QVERIFY(contentItem); QVERIFY(contentItem->hasActiveFocus()); // A single item in an ApplicationWindow with focus: true should receive focus. QQuickItem* item = findItem<QQuickItem>(window->contentItem(), "item"); QVERIFY(item); QVERIFY(item->hasFocus()); QVERIFY(item->hasActiveFocus()); }
void tst_applicationwindow::activeFocusOnTab2() { QQmlEngine engine; QQmlComponent component(&engine); component.loadUrl(testFileUrl("activefocusontab.qml")); QObject* created = component.create(); QScopedPointer<QObject> cleanup(created); QVERIFY(created); QQuickWindow* window = qobject_cast<QQuickWindow*>(created); QVERIFY(window); window->show(); window->requestActivate(); QVERIFY(QTest::qWaitForWindowActive(window)); QVERIFY(QGuiApplication::focusWindow() == window); QQuickItem* contentItem = window->contentItem(); QVERIFY(contentItem); QVERIFY(contentItem->hasActiveFocus()); QQuickItem* item = findItem<QQuickItem>(window->contentItem(), "sub2"); QVERIFY(item); QVERIFY(!item->hasActiveFocus()); // BackTab: contentItem->sub2 QKeyEvent key(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1); QGuiApplication::sendEvent(window, &key); QVERIFY(key.isAccepted()); item = findItem<QQuickItem>(window->contentItem(), "sub2"); QVERIFY(item); QVERIFY(item->hasActiveFocus()); // BackTab: sub2->sub1 key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1); QGuiApplication::sendEvent(window, &key); QVERIFY(key.isAccepted()); item = findItem<QQuickItem>(window->contentItem(), "sub1"); QVERIFY(item); QVERIFY(item->hasActiveFocus()); // BackTab: sub1->sub2 key = QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier, "", false, 1); QGuiApplication::sendEvent(window, &key); QVERIFY(key.isAccepted()); item = findItem<QQuickItem>(window->contentItem(), "sub2"); QVERIFY(item); QVERIFY(item->hasActiveFocus()); }
void tst_qquickfocusscope::canvasFocus() { QQuickView *view = new QQuickView; view->setSource(testFileUrl("canvasFocus.qml")); QQuickView alternateView; QQuickItem *rootObject = view->rootObject(); QVERIFY(rootObject); QQuickItem *rootItem = view->contentItem(); QQuickItem *scope1 = findItem<QQuickItem>(rootObject, QLatin1String("scope1")); QQuickItem *item1 = findItem<QQuickItem>(rootObject, QLatin1String("item1")); QQuickItem *scope2 = findItem<QQuickItem>(rootObject, QLatin1String("scope2")); QQuickItem *item2 = findItem<QQuickItem>(rootObject, QLatin1String("item2")); QVERIFY(scope1); QVERIFY(item1); QVERIFY(scope2); QVERIFY(item2); QSignalSpy rootFocusSpy(rootItem, SIGNAL(focusChanged(bool))); QSignalSpy scope1FocusSpy(scope1, SIGNAL(focusChanged(bool))); QSignalSpy item1FocusSpy(item1, SIGNAL(focusChanged(bool))); QSignalSpy scope2FocusSpy(scope2, SIGNAL(focusChanged(bool))); QSignalSpy item2FocusSpy(item2, SIGNAL(focusChanged(bool))); QSignalSpy rootActiveFocusSpy(rootItem, SIGNAL(activeFocusChanged(bool))); QSignalSpy scope1ActiveFocusSpy(scope1, SIGNAL(activeFocusChanged(bool))); QSignalSpy item1ActiveFocusSpy(item1, SIGNAL(activeFocusChanged(bool))); QSignalSpy scope2ActiveFocusSpy(scope2, SIGNAL(activeFocusChanged(bool))); QSignalSpy item2ActiveFocusSpy(item2, SIGNAL(activeFocusChanged(bool))); QEXPECT_FAIL("", "QTBUG-22415", Abort); QCOMPARE(rootItem->hasFocus(), false); QCOMPARE(rootItem->hasActiveFocus(), false); QCOMPARE(scope1->hasFocus(), true); QCOMPARE(scope1->hasActiveFocus(), false); QCOMPARE(item1->hasFocus(), true); QCOMPARE(item1->hasActiveFocus(), false); QCOMPARE(scope2->hasFocus(), false); QCOMPARE(scope2->hasActiveFocus(), false); QCOMPARE(item2->hasFocus(), false); QCOMPARE(item2->hasActiveFocus(), false); view->show(); view->requestActivate(); QVERIFY(QTest::qWaitForWindowActive(view)); QVERIFY(view == qGuiApp->focusWindow()); // Now the window has focus, active focus given to item1 QCOMPARE(rootItem->hasFocus(), true); QCOMPARE(rootItem->hasActiveFocus(), true); QCOMPARE(scope1->hasFocus(), true); QCOMPARE(scope1->hasActiveFocus(), true); QCOMPARE(item1->hasFocus(), true); QCOMPARE(item1->hasActiveFocus(), true); QCOMPARE(scope2->hasFocus(), false); QCOMPARE(scope2->hasActiveFocus(), false); QCOMPARE(item2->hasFocus(), false); QCOMPARE(item2->hasActiveFocus(), false); QCOMPARE(rootFocusSpy.count(), 1); QCOMPARE(rootActiveFocusSpy.count(), 1); QCOMPARE(scope1FocusSpy.count(), 0); QCOMPARE(scope1ActiveFocusSpy.count(), 1); QCOMPARE(item1FocusSpy.count(), 0); QCOMPARE(item1ActiveFocusSpy.count(), 1); // view->hide(); // seemingly doesn't remove focus, so have an another view steal it. alternateView.show(); alternateView.requestActivate(); QVERIFY(QTest::qWaitForWindowActive(&alternateView)); QVERIFY(QGuiApplication::focusWindow() == &alternateView); QCOMPARE(rootItem->hasFocus(), false); QCOMPARE(rootItem->hasActiveFocus(), false); QCOMPARE(scope1->hasFocus(), true); QCOMPARE(scope1->hasActiveFocus(), false); QCOMPARE(item1->hasFocus(), true); QCOMPARE(item1->hasActiveFocus(), false); QCOMPARE(rootFocusSpy.count(), 2); QCOMPARE(rootActiveFocusSpy.count(), 2); QCOMPARE(scope1FocusSpy.count(), 0); QCOMPARE(scope1ActiveFocusSpy.count(), 2); QCOMPARE(item1FocusSpy.count(), 0); QCOMPARE(item1ActiveFocusSpy.count(), 2); // window does not have focus, so item2 will not get active focus item2->forceActiveFocus(); QCOMPARE(rootItem->hasFocus(), false); QCOMPARE(rootItem->hasActiveFocus(), false); QCOMPARE(scope1->hasFocus(), false); QCOMPARE(scope1->hasActiveFocus(), false); QCOMPARE(item1->hasFocus(), true); QCOMPARE(item1->hasActiveFocus(), false); QCOMPARE(scope2->hasFocus(), true); QCOMPARE(scope2->hasActiveFocus(), false); QCOMPARE(item2->hasFocus(), true); QCOMPARE(item2->hasActiveFocus(), false); QCOMPARE(rootFocusSpy.count(), 2); QCOMPARE(rootActiveFocusSpy.count(), 2); QCOMPARE(scope1FocusSpy.count(), 1); QCOMPARE(scope1ActiveFocusSpy.count(), 2); QCOMPARE(item1FocusSpy.count(), 0); QCOMPARE(item1ActiveFocusSpy.count(), 2); QCOMPARE(scope2FocusSpy.count(), 1); QCOMPARE(scope2ActiveFocusSpy.count(), 0); QCOMPARE(item2FocusSpy.count(), 1); QCOMPARE(item2ActiveFocusSpy.count(), 0); // give the window focus, and item2 will get active focus view->show(); view->requestActivate(); QVERIFY(QTest::qWaitForWindowActive(view)); QVERIFY(QGuiApplication::focusWindow() == view); QCOMPARE(rootItem->hasFocus(), true); QCOMPARE(rootItem->hasActiveFocus(), true); QCOMPARE(scope2->hasFocus(), true); QCOMPARE(scope2->hasActiveFocus(), true); QCOMPARE(item2->hasFocus(), true); QCOMPARE(item2->hasActiveFocus(), true); QCOMPARE(rootFocusSpy.count(), 3); QCOMPARE(rootActiveFocusSpy.count(), 3); QCOMPARE(scope2FocusSpy.count(), 1); QCOMPARE(scope2ActiveFocusSpy.count(), 1); QCOMPARE(item2FocusSpy.count(), 1); QCOMPARE(item2ActiveFocusSpy.count(), 1); delete view; }
void tst_qquickfocusscope::forceActiveFocus() { QQuickView *view = new QQuickView; view->setSource(testFileUrl("forceActiveFocus.qml")); view->show(); view->requestActivate(); QVERIFY(QTest::qWaitForWindowExposed(view)); QTRY_VERIFY(view == qGuiApp->focusWindow()); QQuickItem *rootObject = view->rootObject(); QVERIFY(rootObject); QQuickItem *scope = findItem<QQuickItem>(rootObject, QLatin1String("scope")); QQuickItem *itemA1 = findItem<QQuickItem>(rootObject, QLatin1String("item-a1")); QQuickItem *scopeA = findItem<QQuickItem>(rootObject, QLatin1String("scope-a")); QQuickItem *itemA2 = findItem<QQuickItem>(rootObject, QLatin1String("item-a2")); QQuickItem *itemB1 = findItem<QQuickItem>(rootObject, QLatin1String("item-b1")); QQuickItem *scopeB = findItem<QQuickItem>(rootObject, QLatin1String("scope-b")); QQuickItem *itemB2 = findItem<QQuickItem>(rootObject, QLatin1String("item-b2")); QVERIFY(scope); QVERIFY(itemA1); QVERIFY(scopeA); QVERIFY(itemA2); QVERIFY(itemB1); QVERIFY(scopeB); QVERIFY(itemB2); QSignalSpy rootSpy(rootObject, SIGNAL(activeFocusChanged(bool))); QSignalSpy scopeSpy(scope, SIGNAL(activeFocusChanged(bool))); QSignalSpy scopeASpy(scopeA, SIGNAL(activeFocusChanged(bool))); QSignalSpy scopeBSpy(scopeB, SIGNAL(activeFocusChanged(bool))); // First, walk the focus from item-a1 down to item-a2 and back again itemA1->forceActiveFocus(); QVERIFY(itemA1->hasActiveFocus()); QVERIFY(!rootObject->hasActiveFocus()); QCOMPARE(rootSpy.count(), 0); QCOMPARE(scopeSpy.count(), 1); scopeA->forceActiveFocus(); QVERIFY(!itemA1->hasActiveFocus()); QVERIFY(scopeA->hasActiveFocus()); QCOMPARE(scopeASpy.count(), 1); QCOMPARE(rootSpy.count(), 0); QCOMPARE(scopeSpy.count(), 1); itemA2->forceActiveFocus(); QVERIFY(!itemA1->hasActiveFocus()); QVERIFY(itemA2->hasActiveFocus()); QVERIFY(scopeA->hasActiveFocus()); QCOMPARE(scopeASpy.count(), 1); QCOMPARE(rootSpy.count(), 0); QCOMPARE(scopeSpy.count(), 1); scopeA->forceActiveFocus(); QVERIFY(!itemA1->hasActiveFocus()); QVERIFY(itemA2->hasActiveFocus()); QVERIFY(scopeA->hasActiveFocus()); QCOMPARE(scopeASpy.count(), 1); QCOMPARE(rootSpy.count(), 0); QCOMPARE(scopeSpy.count(), 1); itemA1->forceActiveFocus(); QVERIFY(itemA1->hasActiveFocus()); QVERIFY(!scopeA->hasActiveFocus()); QVERIFY(!itemA2->hasActiveFocus()); QCOMPARE(scopeASpy.count(), 2); QCOMPARE(rootSpy.count(), 0); QCOMPARE(scopeSpy.count(), 1); // Then jump back and forth between branch 'a' and 'b' itemB1->forceActiveFocus(); QVERIFY(itemB1->hasActiveFocus()); QCOMPARE(rootSpy.count(), 0); QCOMPARE(scopeSpy.count(), 1); scopeA->forceActiveFocus(); QVERIFY(!itemA1->hasActiveFocus()); QVERIFY(!itemB1->hasActiveFocus()); QVERIFY(scopeA->hasActiveFocus()); QCOMPARE(scopeASpy.count(), 3); QCOMPARE(rootSpy.count(), 0); QCOMPARE(scopeSpy.count(), 1); scopeB->forceActiveFocus(); QVERIFY(!scopeA->hasActiveFocus()); QVERIFY(!itemB1->hasActiveFocus()); QVERIFY(scopeB->hasActiveFocus()); QCOMPARE(scopeASpy.count(), 4); QCOMPARE(scopeBSpy.count(), 1); QCOMPARE(rootSpy.count(), 0); QCOMPARE(scopeSpy.count(), 1); itemA2->forceActiveFocus(); QVERIFY(!scopeB->hasActiveFocus()); QVERIFY(itemA2->hasActiveFocus()); QCOMPARE(scopeASpy.count(), 5); QCOMPARE(scopeBSpy.count(), 2); QCOMPARE(rootSpy.count(), 0); QCOMPARE(scopeSpy.count(), 1); itemB2->forceActiveFocus(); QVERIFY(!itemA2->hasActiveFocus()); QVERIFY(itemB2->hasActiveFocus()); QCOMPARE(scopeASpy.count(), 6); QCOMPARE(scopeBSpy.count(), 3); QCOMPARE(rootSpy.count(), 0); QCOMPARE(scopeSpy.count(), 1); delete view; }
void tst_applicationwindow::attachedProperties() { QQmlEngine engine; QQmlComponent component(&engine); component.loadUrl(testFileUrl("attachedProperties.qml")); QScopedPointer<QObject> object(component.create()); QVERIFY2(!object.isNull(), qPrintable(component.errorString())); QQuickApplicationWindow *window = qobject_cast<QQuickApplicationWindow *>(object.data()); QVERIFY(window); QQuickItem *childControl = object->property("childControl").value<QQuickItem *>(); QVERIFY(childControl); QCOMPARE(childControl->property("attached_window").value<QQuickApplicationWindow *>(), window); QCOMPARE(childControl->property("attached_contentItem").value<QQuickItem *>(), window->contentItem()); QCOMPARE(childControl->property("attached_activeFocusControl").value<QQuickItem *>(), window->activeFocusControl()); QCOMPARE(childControl->property("attached_header").value<QQuickItem *>(), window->header()); QCOMPARE(childControl->property("attached_footer").value<QQuickItem *>(), window->footer()); QCOMPARE(childControl->property("attached_overlay").value<QQuickItem *>(), window->overlay()); QQuickItem *childItem = object->property("childItem").value<QQuickItem *>(); QVERIFY(childItem); QCOMPARE(childItem->property("attached_window").value<QQuickApplicationWindow *>(), window); QCOMPARE(childItem->property("attached_contentItem").value<QQuickItem *>(), window->contentItem()); QCOMPARE(childItem->property("attached_activeFocusControl").value<QQuickItem *>(), window->activeFocusControl()); QCOMPARE(childItem->property("attached_header").value<QQuickItem *>(), window->header()); QCOMPARE(childItem->property("attached_footer").value<QQuickItem *>(), window->footer()); QCOMPARE(childItem->property("attached_overlay").value<QQuickItem *>(), window->overlay()); QObject *childObject = object->property("childObject").value<QObject *>(); QVERIFY(childObject); QVERIFY(!childObject->property("attached_window").value<QQuickApplicationWindow *>()); QVERIFY(!childObject->property("attached_contentItem").value<QQuickItem *>()); QVERIFY(!childObject->property("attached_activeFocusControl").value<QQuickItem *>()); QVERIFY(!childObject->property("attached_header").value<QQuickItem *>()); QVERIFY(!childObject->property("attached_footer").value<QQuickItem *>()); QVERIFY(!childObject->property("attached_overlay").value<QQuickItem *>()); QQuickWindow *childWindow = object->property("childWindow").value<QQuickWindow *>(); QVERIFY(childWindow); QVERIFY(!childWindow->property("attached_window").value<QQuickApplicationWindow *>()); QVERIFY(!childWindow->property("attached_contentItem").value<QQuickItem *>()); QVERIFY(!childWindow->property("attached_activeFocusControl").value<QQuickItem *>()); QVERIFY(!childWindow->property("attached_header").value<QQuickItem *>()); QVERIFY(!childWindow->property("attached_footer").value<QQuickItem *>()); QVERIFY(!childWindow->property("attached_overlay").value<QQuickItem *>()); QQuickItem *childWindowControl = object->property("childWindowControl").value<QQuickItem *>(); QVERIFY(childWindowControl); QVERIFY(!childWindowControl->property("attached_window").value<QQuickApplicationWindow *>()); QVERIFY(!childWindowControl->property("attached_contentItem").value<QQuickItem *>()); QVERIFY(!childWindowControl->property("attached_activeFocusControl").value<QQuickItem *>()); QVERIFY(!childWindowControl->property("attached_header").value<QQuickItem *>()); QVERIFY(!childWindowControl->property("attached_footer").value<QQuickItem *>()); QVERIFY(!childWindowControl->property("attached_overlay").value<QQuickItem *>()); QQuickItem *childWindowItem = object->property("childWindowItem").value<QQuickItem *>(); QVERIFY(childWindowItem); QVERIFY(!childWindowItem->property("attached_window").value<QQuickApplicationWindow *>()); QVERIFY(!childWindowItem->property("attached_contentItem").value<QQuickItem *>()); QVERIFY(!childWindowItem->property("attached_activeFocusControl").value<QQuickItem *>()); QVERIFY(!childWindowItem->property("attached_header").value<QQuickItem *>()); QVERIFY(!childWindowItem->property("attached_footer").value<QQuickItem *>()); QVERIFY(!childWindowItem->property("attached_overlay").value<QQuickItem *>()); QObject *childWindowObject = object->property("childWindowObject").value<QObject *>(); QVERIFY(childWindowObject); QVERIFY(!childWindowObject->property("attached_window").value<QQuickApplicationWindow *>()); QVERIFY(!childWindowObject->property("attached_contentItem").value<QQuickItem *>()); QVERIFY(!childWindowObject->property("attached_activeFocusControl").value<QQuickItem *>()); QVERIFY(!childWindowObject->property("attached_header").value<QQuickItem *>()); QVERIFY(!childWindowObject->property("attached_footer").value<QQuickItem *>()); QVERIFY(!childWindowObject->property("attached_overlay").value<QQuickItem *>()); QQuickApplicationWindow *childAppWindow = object->property("childAppWindow").value<QQuickApplicationWindow *>(); QVERIFY(childAppWindow); QVERIFY(!childAppWindow->property("attached_window").value<QQuickApplicationWindow *>()); QVERIFY(!childAppWindow->property("attached_contentItem").value<QQuickItem *>()); QVERIFY(!childAppWindow->property("attached_activeFocusControl").value<QQuickItem *>()); QVERIFY(!childAppWindow->property("attached_header").value<QQuickItem *>()); QVERIFY(!childAppWindow->property("attached_footer").value<QQuickItem *>()); QVERIFY(!childAppWindow->property("attached_overlay").value<QQuickItem *>()); QQuickItem *childAppWindowControl = object->property("childAppWindowControl").value<QQuickItem *>(); QVERIFY(childAppWindowControl); QCOMPARE(childAppWindowControl->property("attached_window").value<QQuickApplicationWindow *>(), childAppWindow); QCOMPARE(childAppWindowControl->property("attached_contentItem").value<QQuickItem *>(), childAppWindow->contentItem()); QCOMPARE(childAppWindowControl->property("attached_activeFocusControl").value<QQuickItem *>(), childAppWindow->activeFocusControl()); QCOMPARE(childAppWindowControl->property("attached_header").value<QQuickItem *>(), childAppWindow->header()); QCOMPARE(childAppWindowControl->property("attached_footer").value<QQuickItem *>(), childAppWindow->footer()); QCOMPARE(childAppWindowControl->property("attached_overlay").value<QQuickItem *>(), childAppWindow->overlay()); QQuickItem *childAppWindowItem = object->property("childAppWindowItem").value<QQuickItem *>(); QVERIFY(childAppWindowItem); QCOMPARE(childAppWindowItem->property("attached_window").value<QQuickApplicationWindow *>(), childAppWindow); QCOMPARE(childAppWindowItem->property("attached_contentItem").value<QQuickItem *>(), childAppWindow->contentItem()); QCOMPARE(childAppWindowItem->property("attached_activeFocusControl").value<QQuickItem *>(), childAppWindow->activeFocusControl()); QCOMPARE(childAppWindowItem->property("attached_header").value<QQuickItem *>(), childAppWindow->header()); QCOMPARE(childAppWindowItem->property("attached_footer").value<QQuickItem *>(), childAppWindow->footer()); QCOMPARE(childAppWindowItem->property("attached_overlay").value<QQuickItem *>(), childAppWindow->overlay()); QObject *childAppWindowObject = object->property("childAppWindowObject").value<QObject *>(); QVERIFY(childAppWindowObject); QVERIFY(!childAppWindowObject->property("attached_window").value<QQuickApplicationWindow *>()); QVERIFY(!childAppWindowObject->property("attached_contentItem").value<QQuickItem *>()); QVERIFY(!childAppWindowObject->property("attached_activeFocusControl").value<QQuickItem *>()); QVERIFY(!childAppWindowObject->property("attached_header").value<QQuickItem *>()); QVERIFY(!childAppWindowObject->property("attached_footer").value<QQuickItem *>()); QVERIFY(!childAppWindowObject->property("attached_overlay").value<QQuickItem *>()); window->show(); window->requestActivate(); QVERIFY(QTest::qWaitForWindowActive(window)); QVERIFY(!childControl->hasActiveFocus()); childControl->forceActiveFocus(); QTRY_VERIFY(childControl->hasActiveFocus()); QCOMPARE(window->activeFocusItem(), childControl); QCOMPARE(childControl->property("attached_activeFocusControl").value<QQuickItem *>(), childControl); QQuickItem *header = new QQuickItem; window->setHeader(header); QCOMPARE(window->header(), header); QCOMPARE(childControl->property("attached_header").value<QQuickItem *>(), header); QQuickItem *footer = new QQuickItem; window->setFooter(footer); QCOMPARE(window->footer(), footer); QCOMPARE(childControl->property("attached_footer").value<QQuickItem *>(), footer); childAppWindow->show(); childAppWindow->requestActivate(); QVERIFY(QTest::qWaitForWindowActive(childAppWindow)); QVERIFY(!childAppWindowControl->hasActiveFocus()); childAppWindowControl->forceActiveFocus(); QTRY_VERIFY(childAppWindowControl->hasActiveFocus()); QCOMPARE(childAppWindow->activeFocusItem(), childAppWindowControl); QCOMPARE(childAppWindowControl->property("attached_activeFocusControl").value<QQuickItem *>(), childAppWindowControl); childControl->setParentItem(childAppWindow->contentItem()); QCOMPARE(childControl->window(), childAppWindow); QCOMPARE(childControl->property("attached_window").value<QQuickApplicationWindow *>(), childAppWindow); QCOMPARE(childControl->property("attached_contentItem").value<QQuickItem *>(), childAppWindow->contentItem()); QCOMPARE(childControl->property("attached_activeFocusControl").value<QQuickItem *>(), childAppWindow->activeFocusControl()); QCOMPARE(childControl->property("attached_header").value<QQuickItem *>(), childAppWindow->header()); QCOMPARE(childControl->property("attached_footer").value<QQuickItem *>(), childAppWindow->footer()); QCOMPARE(childControl->property("attached_overlay").value<QQuickItem *>(), childAppWindow->overlay()); childItem->setParentItem(childAppWindow->contentItem()); QCOMPARE(childItem->window(), childAppWindow); QCOMPARE(childItem->property("attached_window").value<QQuickApplicationWindow *>(), childAppWindow); QCOMPARE(childItem->property("attached_contentItem").value<QQuickItem *>(), childAppWindow->contentItem()); QCOMPARE(childItem->property("attached_activeFocusControl").value<QQuickItem *>(), childAppWindow->activeFocusControl()); QCOMPARE(childItem->property("attached_header").value<QQuickItem *>(), childAppWindow->header()); QCOMPARE(childItem->property("attached_footer").value<QQuickItem *>(), childAppWindow->footer()); QCOMPARE(childItem->property("attached_overlay").value<QQuickItem *>(), childAppWindow->overlay()); childControl->setParentItem(Q_NULLPTR); QVERIFY(!childControl->window()); QVERIFY(!childControl->property("attached_window").value<QQuickApplicationWindow *>()); QVERIFY(!childControl->property("attached_contentItem").value<QQuickItem *>()); QVERIFY(!childControl->property("attached_activeFocusControl").value<QQuickItem *>()); QVERIFY(!childControl->property("attached_header").value<QQuickItem *>()); QVERIFY(!childControl->property("attached_footer").value<QQuickItem *>()); QVERIFY(!childControl->property("attached_overlay").value<QQuickItem *>()); childItem->setParentItem(Q_NULLPTR); QVERIFY(!childItem->window()); QVERIFY(!childItem->property("attached_window").value<QQuickApplicationWindow *>()); QVERIFY(!childItem->property("attached_contentItem").value<QQuickItem *>()); QVERIFY(!childItem->property("attached_activeFocusControl").value<QQuickItem *>()); QVERIFY(!childItem->property("attached_header").value<QQuickItem *>()); QVERIFY(!childItem->property("attached_footer").value<QQuickItem *>()); QVERIFY(!childItem->property("attached_overlay").value<QQuickItem *>()); // ### A temporary workaround to unblock the CI until the crash caused // by https://codereview.qt-project.org/#/c/108517/ has been fixed... window->hide(); qApp->processEvents(); }