summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/kernel
diff options
context:
space:
mode:
authorDoris Verria <doris.verria@qt.io>2021-09-30 16:46:37 +0200
committerDoris Verria <doris.verria@qt.io>2021-10-07 14:30:53 +0000
commit911c97f2b59945093e9e87130d687c6a2a9423ac (patch)
tree947baaa0a57118e9071604dc1a51c3665f322191 /tests/auto/widgets/kernel
parentc1281c306c1304374cb7ba1c341db71b584bf6c6 (diff)
QCocoaWindow: Make window key if the app's modal window is hidden
On macOS, when showing a window, we decide if it should be made key and therefore active, if the app has no active modal session or if the window's worksWhenModal returns true. However, the window needs to be made key also when a modal window is present, but not visible. Add this condition when checking if the window needs to be made key. This makes the behavior consistent with what happens when a modal is minimized on macOS. The input focus is passed to the next window, and the window appears active, even if it can not be interacted with. Fixes: QTBUG-85574 Pick-to: 5.15 6.2 Change-Id: I204d4f912128f4a46840789fc2ee08e1b2716bfc Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'tests/auto/widgets/kernel')
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index c4f2944afc..3f73b2ff26 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -437,6 +437,8 @@ private slots:
void setParentChangesFocus_data();
void setParentChangesFocus();
+ void activateWhileModalHidden();
+
private:
const QString m_platform;
QSize m_testWidgetSize;
@@ -12315,5 +12317,24 @@ void tst_QWidget::setParentChangesFocus()
QCOMPARE(QApplication::focusWidget()->objectName(), focusWidget);
}
+void tst_QWidget::activateWhileModalHidden()
+{
+ QDialog dialog;
+ dialog.setWindowModality(Qt::ApplicationModal);
+ dialog.show();
+ QVERIFY(QTest::qWaitForWindowActive(&dialog));
+ QVERIFY(dialog.isActiveWindow());
+ QCOMPARE(QApplication::activeWindow(), &dialog);
+
+ dialog.hide();
+ QTRY_VERIFY(!dialog.isVisible());
+
+ QMainWindow window;
+ window.show();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+ QVERIFY(window.isActiveWindow());
+ QCOMPARE(QApplication::activeWindow(), &window);
+}
+
QTEST_MAIN(tst_QWidget)
#include "tst_qwidget.moc"