summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp')
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp43
1 files changed, 36 insertions, 7 deletions
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 2e0d293399..54ca37e638 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -2236,12 +2236,16 @@ void tst_QWidget::appFocusWidgetWhenLosingFocusProxy()
QApplication::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
QCOMPARE(QApplication::focusWidget(), lineEditFocusProxy);
+ QVERIFY(lineEdit->hasFocus());
+ QVERIFY(lineEditFocusProxy->hasFocus());
// When unsetting the focus proxy
lineEdit->setFocusProxy(nullptr);
- // Then the application focus widget should be back to the lineedit
- QCOMPARE(QApplication::focusWidget(), lineEdit);
+ // then the focus widget should not change
+ QCOMPARE(QApplication::focusWidget(), lineEditFocusProxy);
+ QVERIFY(!lineEdit->hasFocus());
+ QVERIFY(lineEditFocusProxy->hasFocus());
}
void tst_QWidget::explicitTabOrderWithComplexWidget()
@@ -10090,6 +10094,7 @@ void tst_QWidget::openModal_taskQTBUG_5804()
void tst_QWidget::focusProxy()
{
QWidget window;
+ window.setFocusPolicy(Qt::StrongFocus);
class Container : public QWidget
{
public:
@@ -10137,25 +10142,40 @@ void tst_QWidget::focusProxy()
layout->addWidget(container2);
window.setLayout(layout);
+ window.setFocus();
window.show();
window.activateWindow();
if (!QTest::qWaitForWindowExposed(&window) || !QTest::qWaitForWindowActive(&window))
QSKIP("Window activation failed");
- QCOMPARE(container1->focusInCount, 1);
+ // given a widget without focus proxy
+ QVERIFY(window.hasFocus());
+ QCOMPARE(&window, QApplication::focusWidget());
+ QVERIFY(!container1->hasFocus());
+ QVERIFY(!container2->hasFocus());
+ QCOMPARE(container1->focusInCount, 0);
QCOMPARE(container1->focusOutCount, 0);
- // given a widget with a nested focus proxy
+ // setting a (nested) focus proxy moves focus
window.setFocusProxy(container1);
QCOMPARE(window.focusWidget(), container1->edit);
QCOMPARE(window.focusWidget(), QApplication::focusWidget());
+ QVERIFY(window.hasFocus()); // and redirects hasFocus correctly
QVERIFY(container1->edit->hasFocus());
QCOMPARE(container1->focusInCount, 1);
- // changing the focus proxy should move focus to the new proxy
+ // changing the focus proxy should not move focus
window.setFocusProxy(container2);
+ QCOMPARE(window.focusWidget(), container1->edit);
+ QCOMPARE(window.focusWidget(), QApplication::focusWidget());
+ QVERIFY(!window.hasFocus());
+ QCOMPARE(container1->focusOutCount, 0);
+
+ // but setting focus again does
+ window.setFocus();
QCOMPARE(window.focusWidget(), container2->edit);
QCOMPARE(window.focusWidget(), QApplication::focusWidget());
+ QVERIFY(window.hasFocus());
QVERIFY(!container1->edit->hasFocus());
QVERIFY(container2->edit->hasFocus());
QCOMPARE(container1->focusInCount, 1);
@@ -10163,13 +10183,22 @@ void tst_QWidget::focusProxy()
QCOMPARE(container2->focusInCount, 1);
QCOMPARE(container2->focusOutCount, 0);
- // clearing the focus proxy moves focus
+ // clearing the focus proxy does not move focus
window.setFocusProxy(nullptr);
- QCOMPARE(window.focusWidget(), &window);
+ QCOMPARE(window.focusWidget(), container2->edit);
QCOMPARE(window.focusWidget(), QApplication::focusWidget());
+ QVERIFY(!window.hasFocus());
QCOMPARE(container1->focusInCount, 1);
QCOMPARE(container1->focusOutCount, 1);
QCOMPARE(container2->focusInCount, 1);
+ QCOMPARE(container2->focusOutCount, 0);
+
+ // but clearing focus does
+ window.focusWidget()->clearFocus();
+ QCOMPARE(QApplication::focusWidget(), nullptr);
+ QVERIFY(!window.hasFocus());
+ QVERIFY(!container2->hasFocus());
+ QVERIFY(!container2->edit->hasFocus());
QCOMPARE(container2->focusOutCount, 1);
}