aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/focus
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2016-03-22 22:15:55 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2016-04-11 09:00:25 +0000
commitdcf7ae894e5d6db7f0856f556a7c1983ba1ad7e9 (patch)
tree5f37239161d62e3c88354b6cc5615751df92b891 /tests/auto/focus
parent7172c212faf73b6f4ab80b025e4cd45ecc7d6a86 (diff)
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 <mitch.curtis@theqtcompany.com>
Diffstat (limited to 'tests/auto/focus')
-rw-r--r--tests/auto/focus/tst_focus.cpp34
1 files changed, 34 insertions, 0 deletions
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<QQuickControl *>(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)