summaryrefslogtreecommitdiffstats
path: root/tests/auto/qwidget/tst_qwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qwidget/tst_qwidget.cpp')
-rw-r--r--tests/auto/qwidget/tst_qwidget.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp
index 23ead01..3fad366 100644
--- a/tests/auto/qwidget/tst_qwidget.cpp
+++ b/tests/auto/qwidget/tst_qwidget.cpp
@@ -350,6 +350,9 @@ private slots:
void updateOnDestroyedSignal();
void toplevelLineEditFocus();
+ void focusWidget_task254563();
+ void focusWidget_mixed_widget_hierarchy();
+
private:
bool ensureScreenSize(int width, int height);
QWidget *testWidget;
@@ -8977,5 +8980,37 @@ void tst_QWidget::toplevelLineEditFocus()
QCOMPARE(QApplication::focusWidget(), &w);
}
+void tst_QWidget::focusWidget_task254563()
+{
+ //having different visibility for widget is important
+ QWidget top;
+ top.show();
+ QWidget container(&top);
+ QWidget *widget = new QWidget(&container);
+ widget->show();
+
+ widget->setFocus(); //set focus (will set the focus widget up to the toplevel to be 'widget')
+ container.setFocus();
+ delete widget; // will call clearFocus but that doesn't help
+ QVERIFY(top.focusWidget() != widget); //dangling pointer
+}
+
+void tst_QWidget::focusWidget_mixed_widget_hierarchy()
+{
+ QWidget top;
+ top.show();
+ QWidget notvisible(&top);
+ QWidget *visible = new QWidget(&notvisible);
+ visible->show();
+
+ visible->setFocus();
+ notvisible.setFocus();
+ notvisible.show();
+ QCOMPARE(top.focusWidget(), visible);
+ QCOMPARE(notvisible.focusWidget(), visible);
+ QCOMPARE(visible->focusWidget(), visible);
+}
+
+
QTEST_MAIN(tst_QWidget)
#include "tst_qwidget.moc"