From 1512835ee1425a3e874d2f2dd2b01f1a1ea7b763 Mon Sep 17 00:00:00 2001 From: Gunnar Sletta Date: Fri, 11 Jan 2013 12:35:01 +0100 Subject: Do not force focus for non-focused windows. If a QQuickWindow comes to screen but is not the focus window, such as if it is a child window of another window, it should not have focus by default. Change-Id: If9015bbc179bb101178b3bc8de176a1c71c46023 Reviewed-by: Friedemann Kleint Reviewed-by: Andy Nichols --- src/quick/items/qquickwindow.cpp | 10 ++-------- tests/auto/quick/qquickfocusscope/tst_qquickfocusscope.cpp | 1 - tests/auto/quick/qquickitem/tst_qquickitem.cpp | 2 +- tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp | 2 ++ tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp | 2 ++ tests/auto/quick/qquickwindow/tst_qquickwindow.cpp | 5 +++++ 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index eb3a74f62f..b612576c96 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -392,12 +392,6 @@ void QQuickWindowPrivate::init(QQuickWindow *c) contentItemPrivate->windowRefCount = 1; contentItemPrivate->flags |= QQuickItem::ItemIsFocusScope; - // In the absence of a focus in event on some platforms assume the window will - // be activated immediately and set focus on the contentItem - // ### Remove when QTBUG-22415 is resolved. - //It is important that this call happens after the contentItem has a window.. - contentItem->setFocus(true); - windowManager = QQuickWindowManager::instance(); context = windowManager->sceneGraphContext(); q->setSurfaceType(QWindow::OpenGLSurface); @@ -657,10 +651,10 @@ void QQuickWindowPrivate::setFocusInScope(QQuickItem *scope, QQuickItem *item, F } if (!(options & DontChangeFocusProperty)) { -// if (item != contentItem || QGuiApplication::focusWindow() == q) { // QTBUG-22415 + if (item != contentItem || QGuiApplication::focusWindow() == q) { itemPrivate->focus = true; changed << item; -// } + } } if (newActiveFocusItem && contentItem->hasFocus()) { diff --git a/tests/auto/quick/qquickfocusscope/tst_qquickfocusscope.cpp b/tests/auto/quick/qquickfocusscope/tst_qquickfocusscope.cpp index 3f839b4fc0..3ab5a7abff 100644 --- a/tests/auto/quick/qquickfocusscope/tst_qquickfocusscope.cpp +++ b/tests/auto/quick/qquickfocusscope/tst_qquickfocusscope.cpp @@ -525,7 +525,6 @@ void tst_qquickfocusscope::canvasFocus() 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); diff --git a/tests/auto/quick/qquickitem/tst_qquickitem.cpp b/tests/auto/quick/qquickitem/tst_qquickitem.cpp index 6209f412c3..851ff88c64 100644 --- a/tests/auto/quick/qquickitem/tst_qquickitem.cpp +++ b/tests/auto/quick/qquickitem/tst_qquickitem.cpp @@ -732,7 +732,7 @@ void tst_qquickitem::focusSubItemInNonFocusScope() QQuickView *view = new QQuickView; view->setSource(testFileUrl("focusSubItemInNonFocusScope.qml")); view->show(); - qApp->processEvents(); + QTest::qWaitForWindowActive(view); QQuickItem *dummyItem = view->rootObject()->findChild("dummyItem"); QVERIFY(dummyItem); diff --git a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp index f8332d661d..1effc68bfe 100644 --- a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp +++ b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp @@ -2223,6 +2223,7 @@ void tst_qquicktextedit::cursorDelegate() QQuickView view(source); view.show(); view.requestActivate(); + QTest::qWaitForWindowActive(&view); QQuickTextEdit *textEditObject = view.rootObject()->findChild("textEditObject"); QVERIFY(textEditObject != 0); // Delegate creation is deferred until focus in or cursor visibility is forced. @@ -2338,6 +2339,7 @@ void tst_qquicktextedit::remoteCursorDelegate() view.setSource(testFileUrl("cursorTestRemote.qml")); view.show(); view.requestActivate(); + QTest::qWaitForWindowActive(&view); QQuickTextEdit *textEditObject = view.rootObject()->findChild("textEditObject"); QVERIFY(textEditObject != 0); diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp index 7e45bd1f14..b25178cbc5 100644 --- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp +++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp @@ -2665,6 +2665,7 @@ void tst_qquicktextinput::cursorDelegate() QQuickView view(source); view.show(); view.requestActivate(); + QTest::qWaitForWindowActive(&view); QQuickTextInput *textInputObject = view.rootObject()->findChild("textInputObject"); QVERIFY(textInputObject != 0); // Delegate is created on demand, and so won't be available immediately. Focus in or @@ -2784,6 +2785,7 @@ void tst_qquicktextinput::remoteCursorDelegate() view.setSource(testFileUrl("cursorTestRemote.qml")); view.show(); view.requestActivate(); + QTest::qWaitForWindowActive(&view); QQuickTextInput *textInputObject = view.rootObject()->findChild("textInputObject"); QVERIFY(textInputObject != 0); diff --git a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp index ec9d0e280e..6ba54558f7 100644 --- a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp +++ b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp @@ -997,6 +997,11 @@ void tst_qquickwindow::focusObject() QQuickWindow *window = qobject_cast(created); QVERIFY(window); + window->show(); + QVERIFY(QTest::qWaitForWindowExposed(window)); + window->requestActivate(); + QVERIFY(QTest::qWaitForWindowActive(window)); + QQuickItem *item1 = window->findChild("item1"); QVERIFY(item1); item1->setFocus(true); -- cgit v1.2.3