From eba39a3ba543c04747aa837b064a35ea6b32ed89 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sun, 29 Nov 2015 21:56:36 +0100 Subject: Add ApplicationWindow::activeFocusControl This makes it possible for ApplicationWindow to visualize key focus navigation with a single focus rectangle that follows the currently active focus control. Change-Id: Ief92bcdc64891b7baa3503216137665a8badcd17 Reviewed-by: Mitch Curtis --- .../applicationwindow/data/activeFocusControl.qml | 105 +++++++++++++++ .../applicationwindow/data/attachedProperties.qml | 58 ++++++-- .../applicationwindow/tst_applicationwindow.cpp | 150 ++++++++++++++++++--- 3 files changed, 280 insertions(+), 33 deletions(-) create mode 100644 tests/auto/applicationwindow/data/activeFocusControl.qml (limited to 'tests') diff --git a/tests/auto/applicationwindow/data/activeFocusControl.qml b/tests/auto/applicationwindow/data/activeFocusControl.qml new file mode 100644 index 00000000..51b3241f --- /dev/null +++ b/tests/auto/applicationwindow/data/activeFocusControl.qml @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.6 +import Qt.labs.controls 1.0 + +ApplicationWindow { + width: 400 + height: 400 + + property alias container_column: column + property alias textInput_column: ti_column + property alias textEdit_column: te_column + property alias textField_column: tf_column + property alias textArea_column: ta_column + property alias spinBox_column: sp_column + property alias spinContent_column: sp_column.contentItem + + property alias container_frame: frame + property alias textInput_frame: ti_frame + property alias textEdit_frame: te_frame + property alias textField_frame: tf_frame + property alias textArea_frame: ta_frame + property alias spinBox_frame: sp_frame + property alias spinContent_frame: sp_frame.contentItem + + Column { + id: column + + TextInput { + id: ti_column + } + TextEdit { + id: te_column + } + TextField { + id: tf_column + } + TextArea { + id: ta_column + } + SpinBox { + id: sp_column + } + } + + Frame { + id: frame + + Column { + TextInput { + id: ti_frame + } + TextEdit { + id: te_frame + } + TextField { + id: tf_frame + } + TextArea { + id: ta_frame + } + SpinBox { + id: sp_frame + } + } + } +} diff --git a/tests/auto/applicationwindow/data/attachedProperties.qml b/tests/auto/applicationwindow/data/attachedProperties.qml index 060a3093..72707537 100644 --- a/tests/auto/applicationwindow/data/attachedProperties.qml +++ b/tests/auto/applicationwindow/data/attachedProperties.qml @@ -43,15 +43,27 @@ import QtQuick.Window 2.2 import Qt.labs.controls 1.0 ApplicationWindow { + property alias childControl: childControl property alias childItem: childItem property alias childObject: childObject - Item { + Control { + id: childControl + + property ApplicationWindow attached_window: ApplicationWindow.window + property Item attached_contentItem: ApplicationWindow.contentItem + property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl + property Item attached_header: ApplicationWindow.header + property Item attached_footer: ApplicationWindow.footer + property Item attached_overlay: ApplicationWindow.overlay + } + + Control { id: childItem property ApplicationWindow attached_window: ApplicationWindow.window property Item attached_contentItem: ApplicationWindow.contentItem - property Item attached_activeFocusItem: ApplicationWindow.activeFocusItem + property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl property Item attached_header: ApplicationWindow.header property Item attached_footer: ApplicationWindow.footer property Item attached_overlay: ApplicationWindow.overlay @@ -62,13 +74,14 @@ ApplicationWindow { property ApplicationWindow attached_window: ApplicationWindow.window property Item attached_contentItem: ApplicationWindow.contentItem - property Item attached_activeFocusItem: ApplicationWindow.activeFocusItem + property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl property Item attached_header: ApplicationWindow.header property Item attached_footer: ApplicationWindow.footer property Item attached_overlay: ApplicationWindow.overlay } property alias childWindow: childWindow + property alias childWindowControl: childWindowControl property alias childWindowItem: childWindowItem property alias childWindowObject: childWindowObject @@ -77,17 +90,28 @@ ApplicationWindow { property ApplicationWindow attached_window: ApplicationWindow.window property Item attached_contentItem: ApplicationWindow.contentItem - property Item attached_activeFocusItem: ApplicationWindow.activeFocusItem + property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl property Item attached_header: ApplicationWindow.header property Item attached_footer: ApplicationWindow.footer property Item attached_overlay: ApplicationWindow.overlay - Item { + Control { + id: childWindowControl + + property ApplicationWindow attached_window: ApplicationWindow.window + property Item attached_contentItem: ApplicationWindow.contentItem + property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl + property Item attached_header: ApplicationWindow.header + property Item attached_footer: ApplicationWindow.footer + property Item attached_overlay: ApplicationWindow.overlay + } + + Control { id: childWindowItem property ApplicationWindow attached_window: ApplicationWindow.window property Item attached_contentItem: ApplicationWindow.contentItem - property Item attached_activeFocusItem: ApplicationWindow.activeFocusItem + property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl property Item attached_header: ApplicationWindow.header property Item attached_footer: ApplicationWindow.footer property Item attached_overlay: ApplicationWindow.overlay @@ -98,7 +122,7 @@ ApplicationWindow { property ApplicationWindow attached_window: ApplicationWindow.window property Item attached_contentItem: ApplicationWindow.contentItem - property Item attached_activeFocusItem: ApplicationWindow.activeFocusItem + property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl property Item attached_header: ApplicationWindow.header property Item attached_footer: ApplicationWindow.footer property Item attached_overlay: ApplicationWindow.overlay @@ -106,6 +130,7 @@ ApplicationWindow { } property alias childAppWindow: childAppWindow + property alias childAppWindowControl: childAppWindowControl property alias childAppWindowItem: childAppWindowItem property alias childAppWindowObject: childAppWindowObject @@ -114,17 +139,28 @@ ApplicationWindow { property ApplicationWindow attached_window: ApplicationWindow.window property Item attached_contentItem: ApplicationWindow.contentItem - property Item attached_activeFocusItem: ApplicationWindow.activeFocusItem + property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl property Item attached_header: ApplicationWindow.header property Item attached_footer: ApplicationWindow.footer property Item attached_overlay: ApplicationWindow.overlay - Item { + Control { + id: childAppWindowControl + + property ApplicationWindow attached_window: ApplicationWindow.window + property Item attached_contentItem: ApplicationWindow.contentItem + property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl + property Item attached_header: ApplicationWindow.header + property Item attached_footer: ApplicationWindow.footer + property Item attached_overlay: ApplicationWindow.overlay + } + + Control { id: childAppWindowItem property ApplicationWindow attached_window: ApplicationWindow.window property Item attached_contentItem: ApplicationWindow.contentItem - property Item attached_activeFocusItem: ApplicationWindow.activeFocusItem + property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl property Item attached_header: ApplicationWindow.header property Item attached_footer: ApplicationWindow.footer property Item attached_overlay: ApplicationWindow.overlay @@ -135,7 +171,7 @@ ApplicationWindow { property ApplicationWindow attached_window: ApplicationWindow.window property Item attached_contentItem: ApplicationWindow.contentItem - property Item attached_activeFocusItem: ApplicationWindow.activeFocusItem + property Item attached_activeFocusControl: ApplicationWindow.activeFocusControl property Item attached_header: ApplicationWindow.header property Item attached_footer: ApplicationWindow.footer property Item attached_overlay: ApplicationWindow.overlay diff --git a/tests/auto/applicationwindow/tst_applicationwindow.cpp b/tests/auto/applicationwindow/tst_applicationwindow.cpp index 6deb49d2..10360c4f 100644 --- a/tests/auto/applicationwindow/tst_applicationwindow.cpp +++ b/tests/auto/applicationwindow/tst_applicationwindow.cpp @@ -64,6 +64,8 @@ private slots: void implicitFill(); void attachedProperties(); void font(); + void activeFocusControl_data(); + void activeFocusControl(); }; void tst_applicationwindow::qmlCreation() @@ -266,11 +268,20 @@ void tst_applicationwindow::attachedProperties() QQuickApplicationWindow *window = qobject_cast(object.data()); QVERIFY(window); + QQuickItem *childControl = object->property("childControl").value(); + QVERIFY(childControl); + QCOMPARE(childControl->property("attached_window").value(), window); + QCOMPARE(childControl->property("attached_contentItem").value(), window->contentItem()); + QCOMPARE(childControl->property("attached_activeFocusControl").value(), window->activeFocusControl()); + QCOMPARE(childControl->property("attached_header").value(), window->header()); + QCOMPARE(childControl->property("attached_footer").value(), window->footer()); + QCOMPARE(childControl->property("attached_overlay").value(), window->overlay()); + QQuickItem *childItem = object->property("childItem").value(); QVERIFY(childItem); QCOMPARE(childItem->property("attached_window").value(), window); QCOMPARE(childItem->property("attached_contentItem").value(), window->contentItem()); - QCOMPARE(childItem->property("attached_activeFocusItem").value(), window->activeFocusItem()); + QCOMPARE(childItem->property("attached_activeFocusControl").value(), window->activeFocusControl()); QCOMPARE(childItem->property("attached_header").value(), window->header()); QCOMPARE(childItem->property("attached_footer").value(), window->footer()); QCOMPARE(childItem->property("attached_overlay").value(), window->overlay()); @@ -279,7 +290,7 @@ void tst_applicationwindow::attachedProperties() QVERIFY(childObject); QVERIFY(!childObject->property("attached_window").value()); QVERIFY(!childObject->property("attached_contentItem").value()); - QVERIFY(!childObject->property("attached_activeFocusItem").value()); + QVERIFY(!childObject->property("attached_activeFocusControl").value()); QVERIFY(!childObject->property("attached_header").value()); QVERIFY(!childObject->property("attached_footer").value()); QVERIFY(!childObject->property("attached_overlay").value()); @@ -288,16 +299,25 @@ void tst_applicationwindow::attachedProperties() QVERIFY(childWindow); QVERIFY(!childWindow->property("attached_window").value()); QVERIFY(!childWindow->property("attached_contentItem").value()); - QVERIFY(!childWindow->property("attached_activeFocusItem").value()); + QVERIFY(!childWindow->property("attached_activeFocusControl").value()); QVERIFY(!childWindow->property("attached_header").value()); QVERIFY(!childWindow->property("attached_footer").value()); QVERIFY(!childWindow->property("attached_overlay").value()); + QQuickItem *childWindowControl = object->property("childWindowControl").value(); + QVERIFY(childWindowControl); + QVERIFY(!childWindowControl->property("attached_window").value()); + QVERIFY(!childWindowControl->property("attached_contentItem").value()); + QVERIFY(!childWindowControl->property("attached_activeFocusControl").value()); + QVERIFY(!childWindowControl->property("attached_header").value()); + QVERIFY(!childWindowControl->property("attached_footer").value()); + QVERIFY(!childWindowControl->property("attached_overlay").value()); + QQuickItem *childWindowItem = object->property("childWindowItem").value(); QVERIFY(childWindowItem); QVERIFY(!childWindowItem->property("attached_window").value()); QVERIFY(!childWindowItem->property("attached_contentItem").value()); - QVERIFY(!childWindowItem->property("attached_activeFocusItem").value()); + QVERIFY(!childWindowItem->property("attached_activeFocusControl").value()); QVERIFY(!childWindowItem->property("attached_header").value()); QVERIFY(!childWindowItem->property("attached_footer").value()); QVERIFY(!childWindowItem->property("attached_overlay").value()); @@ -306,7 +326,7 @@ void tst_applicationwindow::attachedProperties() QVERIFY(childWindowObject); QVERIFY(!childWindowObject->property("attached_window").value()); QVERIFY(!childWindowObject->property("attached_contentItem").value()); - QVERIFY(!childWindowObject->property("attached_activeFocusItem").value()); + QVERIFY(!childWindowObject->property("attached_activeFocusControl").value()); QVERIFY(!childWindowObject->property("attached_header").value()); QVERIFY(!childWindowObject->property("attached_footer").value()); QVERIFY(!childWindowObject->property("attached_overlay").value()); @@ -315,16 +335,25 @@ void tst_applicationwindow::attachedProperties() QVERIFY(childAppWindow); QVERIFY(!childAppWindow->property("attached_window").value()); QVERIFY(!childAppWindow->property("attached_contentItem").value()); - QVERIFY(!childAppWindow->property("attached_activeFocusItem").value()); + QVERIFY(!childAppWindow->property("attached_activeFocusControl").value()); QVERIFY(!childAppWindow->property("attached_header").value()); QVERIFY(!childAppWindow->property("attached_footer").value()); QVERIFY(!childAppWindow->property("attached_overlay").value()); + QQuickItem *childAppWindowControl = object->property("childAppWindowControl").value(); + QVERIFY(childAppWindowControl); + QCOMPARE(childAppWindowControl->property("attached_window").value(), childAppWindow); + QCOMPARE(childAppWindowControl->property("attached_contentItem").value(), childAppWindow->contentItem()); + QCOMPARE(childAppWindowControl->property("attached_activeFocusControl").value(), childAppWindow->activeFocusControl()); + QCOMPARE(childAppWindowControl->property("attached_header").value(), childAppWindow->header()); + QCOMPARE(childAppWindowControl->property("attached_footer").value(), childAppWindow->footer()); + QCOMPARE(childAppWindowControl->property("attached_overlay").value(), childAppWindow->overlay()); + QQuickItem *childAppWindowItem = object->property("childAppWindowItem").value(); QVERIFY(childAppWindowItem); QCOMPARE(childAppWindowItem->property("attached_window").value(), childAppWindow); QCOMPARE(childAppWindowItem->property("attached_contentItem").value(), childAppWindow->contentItem()); - QCOMPARE(childAppWindowItem->property("attached_activeFocusItem").value(), childAppWindow->activeFocusItem()); + QCOMPARE(childAppWindowItem->property("attached_activeFocusControl").value(), childAppWindow->activeFocusControl()); QCOMPARE(childAppWindowItem->property("attached_header").value(), childAppWindow->header()); QCOMPARE(childAppWindowItem->property("attached_footer").value(), childAppWindow->footer()); QCOMPARE(childAppWindowItem->property("attached_overlay").value(), childAppWindow->overlay()); @@ -333,7 +362,7 @@ void tst_applicationwindow::attachedProperties() QVERIFY(childAppWindowObject); QVERIFY(!childAppWindowObject->property("attached_window").value()); QVERIFY(!childAppWindowObject->property("attached_contentItem").value()); - QVERIFY(!childAppWindowObject->property("attached_activeFocusItem").value()); + QVERIFY(!childAppWindowObject->property("attached_activeFocusControl").value()); QVERIFY(!childAppWindowObject->property("attached_header").value()); QVERIFY(!childAppWindowObject->property("attached_footer").value()); QVERIFY(!childAppWindowObject->property("attached_overlay").value()); @@ -342,46 +371,64 @@ void tst_applicationwindow::attachedProperties() window->requestActivate(); QVERIFY(QTest::qWaitForWindowActive(window)); - QVERIFY(!childItem->hasActiveFocus()); - childItem->forceActiveFocus(); - QTRY_VERIFY(childItem->hasActiveFocus()); - QCOMPARE(window->activeFocusItem(), childItem); - QCOMPARE(childItem->property("attached_activeFocusItem").value(), childItem); + QVERIFY(!childControl->hasActiveFocus()); + childControl->forceActiveFocus(); + QTRY_VERIFY(childControl->hasActiveFocus()); + QCOMPARE(window->activeFocusItem(), childControl); + QCOMPARE(childControl->property("attached_activeFocusControl").value(), childControl); QQuickItem *header = new QQuickItem; window->setHeader(header); QCOMPARE(window->header(), header); - QCOMPARE(childItem->property("attached_header").value(), header); + QCOMPARE(childControl->property("attached_header").value(), header); QQuickItem *footer = new QQuickItem; window->setFooter(footer); QCOMPARE(window->footer(), footer); - QCOMPARE(childItem->property("attached_footer").value(), footer); + QCOMPARE(childControl->property("attached_footer").value(), footer); childAppWindow->show(); childAppWindow->requestActivate(); QVERIFY(QTest::qWaitForWindowActive(childAppWindow)); - QVERIFY(!childAppWindowItem->hasActiveFocus()); - childAppWindowItem->forceActiveFocus(); - QTRY_VERIFY(childAppWindowItem->hasActiveFocus()); - QCOMPARE(childAppWindow->activeFocusItem(), childAppWindowItem); - QCOMPARE(childAppWindowItem->property("attached_activeFocusItem").value(), childAppWindowItem); + QVERIFY(!childAppWindowControl->hasActiveFocus()); + childAppWindowControl->forceActiveFocus(); + QTRY_VERIFY(childAppWindowControl->hasActiveFocus()); + QCOMPARE(childAppWindow->activeFocusItem(), childAppWindowControl); + QCOMPARE(childAppWindowControl->property("attached_activeFocusControl").value(), childAppWindowControl); + + childControl->setParentItem(childAppWindow->contentItem()); + QCOMPARE(childControl->window(), childAppWindow); + QCOMPARE(childControl->property("attached_window").value(), childAppWindow); + QCOMPARE(childControl->property("attached_contentItem").value(), childAppWindow->contentItem()); + QCOMPARE(childControl->property("attached_activeFocusControl").value(), childAppWindow->activeFocusControl()); + QCOMPARE(childControl->property("attached_header").value(), childAppWindow->header()); + QCOMPARE(childControl->property("attached_footer").value(), childAppWindow->footer()); + QCOMPARE(childControl->property("attached_overlay").value(), childAppWindow->overlay()); childItem->setParentItem(childAppWindow->contentItem()); QCOMPARE(childItem->window(), childAppWindow); QCOMPARE(childItem->property("attached_window").value(), childAppWindow); QCOMPARE(childItem->property("attached_contentItem").value(), childAppWindow->contentItem()); - QCOMPARE(childItem->property("attached_activeFocusItem").value(), childAppWindow->activeFocusItem()); + QCOMPARE(childItem->property("attached_activeFocusControl").value(), childAppWindow->activeFocusControl()); QCOMPARE(childItem->property("attached_header").value(), childAppWindow->header()); QCOMPARE(childItem->property("attached_footer").value(), childAppWindow->footer()); QCOMPARE(childItem->property("attached_overlay").value(), childAppWindow->overlay()); + childControl->setParentItem(Q_NULLPTR); + QVERIFY(!childControl->window()); + QVERIFY(!childControl->property("attached_window").value()); + QVERIFY(!childControl->property("attached_contentItem").value()); + QVERIFY(!childControl->property("attached_activeFocusControl").value()); + QVERIFY(!childControl->property("attached_header").value()); + QVERIFY(!childControl->property("attached_footer").value()); + QVERIFY(!childControl->property("attached_overlay").value()); + childItem->setParentItem(Q_NULLPTR); QVERIFY(!childItem->window()); QVERIFY(!childItem->property("attached_window").value()); QVERIFY(!childItem->property("attached_contentItem").value()); - QVERIFY(!childItem->property("attached_activeFocusItem").value()); + QVERIFY(!childItem->property("attached_activeFocusControl").value()); QVERIFY(!childItem->property("attached_header").value()); QVERIFY(!childItem->property("attached_footer").value()); QVERIFY(!childItem->property("attached_overlay").value()); @@ -443,6 +490,65 @@ void tst_applicationwindow::font() QCOMPARE(item6->font(), font); } +void tst_applicationwindow::activeFocusControl_data() +{ + QTest::addColumn("containerName"); + QTest::addColumn("activeFocusItemName"); + QTest::addColumn("activeFocusControlName"); + + QTest::newRow("Column:TextInput") << QByteArray("container_column") << QByteArray("textInput_column") << QByteArray(); + QTest::newRow("Column:TextEdit") << QByteArray("container_column") << QByteArray("textEdit_column") << QByteArray(); + QTest::newRow("Column:TextField") << QByteArray("container_column") << QByteArray("textField_column") << QByteArray("textField_column"); + QTest::newRow("Column:TextArea") << QByteArray("container_column") << QByteArray("textArea_column") << QByteArray("textArea_column"); + QTest::newRow("Column:SpinBox") << QByteArray("container_column") << QByteArray("spinContent_column") << QByteArray("spinBox_column"); + + QTest::newRow("Frame:TextInput") << QByteArray("container_frame") << QByteArray("textInput_frame") << QByteArray("container_frame"); + QTest::newRow("Frame:TextEdit") << QByteArray("container_frame") << QByteArray("textEdit_frame") << QByteArray("container_frame"); + QTest::newRow("Frame:TextField") << QByteArray("container_frame") << QByteArray("textField_frame") << QByteArray("textField_frame"); + QTest::newRow("Frame:TextArea") << QByteArray("container_frame") << QByteArray("textArea_frame") << QByteArray("textArea_frame"); + QTest::newRow("Frame:SpinBox") << QByteArray("container_frame") << QByteArray("spinContent_frame") << QByteArray("spinBox_frame"); +} + +void tst_applicationwindow::activeFocusControl() +{ + QFETCH(QByteArray, containerName); + QFETCH(QByteArray, activeFocusItemName); + QFETCH(QByteArray, activeFocusControlName); + + QQmlEngine engine; + QQmlComponent component(&engine); + component.loadUrl(testFileUrl("activeFocusControl.qml")); + QScopedPointer object(component.create()); + QVERIFY(!object.isNull()); + + QQuickApplicationWindow* window = qobject_cast(object.data()); + QVERIFY(window); + QVERIFY(!window->isVisible()); + QCOMPARE(window->width(), 400); + QCOMPARE(window->height(), 400); + + window->show(); + QVERIFY(QTest::qWaitForWindowActive(window)); + + QQuickItem *container = window->property(containerName).value(); + QVERIFY(container); + + QQuickItem *activeFocusItem = window->property(activeFocusItemName).value(); + QVERIFY(activeFocusItem); + activeFocusItem->forceActiveFocus(); + QVERIFY(activeFocusItem->hasActiveFocus()); + QCOMPARE(window->activeFocusItem(), activeFocusItem); + + QQuickItem *activeFocusControl = window->property(activeFocusControlName).value(); + if (activeFocusControlName.isEmpty()) { + QVERIFY(!activeFocusControl); + } else { + QVERIFY(activeFocusControl); + QVERIFY(activeFocusControl->hasActiveFocus()); + } + QCOMPARE(window->activeFocusControl(), activeFocusControl); +} + QTEST_MAIN(tst_applicationwindow) #include "tst_applicationwindow.moc" -- cgit v1.2.3