From dcf7ae894e5d6db7f0856f556a7c1983ba1ad7e9 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Tue, 22 Mar 2016 22:15:55 +0100 Subject: Add Control::activeKeyFocus This is a convenience property that combines Item::activeFocus and Control::focusReason. This allows us to solve QTBUG-51796 in an elegant way - we can simply set Qt::StrongFocus policy on most of the interactive controls, such as buttons. The only thing we need to make sure is to use activeKeyFocus instead of activeFocus in the styles. This ensures that key focus is only visualized when actually interacting with keys - not when interacting via touch or mouse. This is a generalized version of the solution that was already used in the Universal style ApplicationWindow. Change-Id: Ifbf78e3e412f3791c8f7c369bb2de53af9ac6b0f Task-number: QTBUG-51796 Reviewed-by: Mitch Curtis --- tests/auto/focus/tst_focus.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'tests/auto/focus') diff --git a/tests/auto/focus/tst_focus.cpp b/tests/auto/focus/tst_focus.cpp index 18012a42..f058f137 100644 --- a/tests/auto/focus/tst_focus.cpp +++ b/tests/auto/focus/tst_focus.cpp @@ -132,6 +132,9 @@ void tst_focus::policy() QQuickControl *control = qobject_cast(window->contentItem()->childItems().first()); QVERIFY(control); + QVERIFY(!control->hasActiveFocus()); + QVERIFY(!control->hasActiveKeyFocus()); + window->show(); window->requestActivate(); QVERIFY(QTest::qWaitForWindowActive(window.data())); @@ -146,14 +149,27 @@ void tst_focus::policy() QCOMPARE(control->focusPolicy(), Qt::TabFocus); QCOMPARE(control->activeFocusOnTab(), true); + // Qt::TabFocus + QGuiApplication::styleHints()->setTabFocusBehavior(Qt::TabFocusAllControls); + QTest::keyClick(window.data(), Qt::Key_Tab); + QVERIFY(control->hasActiveFocus()); + QVERIFY(control->hasActiveKeyFocus()); + QGuiApplication::styleHints()->setTabFocusBehavior(Qt::TabFocusBehavior(-1)); + + // reset + control->setFocus(false); + QVERIFY(!control->hasActiveFocus()); + // Qt::ClickFocus QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, QPoint(control->width() / 2, control->height() / 2)); QVERIFY(!control->hasActiveFocus()); + QVERIFY(!control->hasActiveKeyFocus()); control->setFocusPolicy(Qt::ClickFocus); QCOMPARE(control->focusPolicy(), Qt::ClickFocus); QTest::mouseClick(window.data(), Qt::LeftButton, Qt::NoModifier, QPoint(control->width() / 2, control->height() / 2)); QVERIFY(control->hasActiveFocus()); + QVERIFY(!control->hasActiveKeyFocus()); // reset control->setFocus(false); @@ -163,12 +179,14 @@ void tst_focus::policy() QWheelEvent wheelEvent(QPoint(control->width() / 2, control->height() / 2), 10, Qt::NoButton, Qt::NoModifier); QGuiApplication::sendEvent(control, &wheelEvent); QVERIFY(!control->hasActiveFocus()); + QVERIFY(!control->hasActiveKeyFocus()); control->setFocusPolicy(Qt::WheelFocus); QCOMPARE(control->focusPolicy(), Qt::WheelFocus); QGuiApplication::sendEvent(control, &wheelEvent); QVERIFY(control->hasActiveFocus()); + QVERIFY(!control->hasActiveKeyFocus()); } void tst_focus::reason_data() @@ -205,9 +223,25 @@ void tst_focus::reason() QVERIFY(control->hasActiveFocus()); QCOMPARE(control->property("focusReason").toInt(), int(Qt::MouseFocusReason)); + QEXPECT_FAIL("TextArea", "TODO: TextArea::activeKeyFocus?", Continue); + QEXPECT_FAIL("TextField", "TODO: TextField::activeKeyFocus?", Continue); + QCOMPARE(control->property("activeKeyFocus"), QVariant(false)); + window->contentItem()->forceActiveFocus(Qt::TabFocusReason); QVERIFY(!control->hasActiveFocus()); QCOMPARE(control->property("focusReason").toInt(), int(Qt::TabFocusReason)); + + QEXPECT_FAIL("TextArea", "", Continue); + QEXPECT_FAIL("TextField", "", Continue); + QCOMPARE(control->property("activeKeyFocus"), QVariant(false)); + + control->forceActiveFocus(Qt::TabFocusReason); + QVERIFY(control->hasActiveFocus()); + QCOMPARE(control->property("focusReason").toInt(), int(Qt::TabFocusReason)); + + QEXPECT_FAIL("TextArea", "", Continue); + QEXPECT_FAIL("TextField", "", Continue); + QCOMPARE(control->property("activeKeyFocus"), QVariant(true)); } QTEST_MAIN(tst_focus) -- cgit v1.2.3