summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVolker Hilsheimer <[email protected]>2023-08-30 16:45:58 +0200
committerQt Cherry-pick Bot <[email protected]>2023-09-05 21:21:54 +0000
commite36e681a2d472ff97dbde913e0e544f7589612f4 (patch)
tree35c9881db2312c807dec229d713bf7c42db2b71f
parentb549584db869e71c7187ef07dc71a6695efc6025 (diff)
QPrintDialog on macOS: Don't crash when parent is not a window
The test case is an incomplete version of the test that will be added to verify the fix for the referenced bug report. The test crashes already when showing the dialog without this fix. Task-number: QTBUG-116277 Change-Id: I969a723157f6453b78bafae5cb24a6b37b1eea50 Reviewed-by: Tor Arne Vestbø <[email protected]> (cherry picked from commit e73f35d9c63378ed26e33f488a3ee5bb0745e9d5) Reviewed-by: Qt Cherry-pick Bot <[email protected]>
-rw-r--r--src/printsupport/dialogs/qprintdialog_mac.mm5
-rw-r--r--tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp16
2 files changed, 19 insertions, 2 deletions
diff --git a/src/printsupport/dialogs/qprintdialog_mac.mm b/src/printsupport/dialogs/qprintdialog_mac.mm
index b1b56dbf547..fa4fac18847 100644
--- a/src/printsupport/dialogs/qprintdialog_mac.mm
+++ b/src/printsupport/dialogs/qprintdialog_mac.mm
@@ -238,8 +238,8 @@ void QPrintDialogPrivate::openCocoaPrintPanel(Qt::WindowModality modality)
int rval = [printPanel runModalWithPrintInfo:printInfo];
[delegate printPanelDidEnd:printPanel returnCode:rval contextInfo:q];
} else {
- Q_ASSERT(q->parentWidget());
- QWindow *parentWindow = q->parentWidget()->windowHandle();
+ Q_ASSERT(q->window());
+ QWindow *parentWindow = q->window()->windowHandle();
NSWindow *window = static_cast<NSWindow *>(qApp->platformNativeInterface()->nativeResourceForWindow("nswindow", parentWindow));
[printPanel beginSheetWithPrintInfo:printInfo
modalForWindow:window
@@ -271,6 +271,7 @@ QPrintDialog::QPrintDialog(QWidget *parent)
QPrintDialog::~QPrintDialog()
{
+ hide();
}
int QPrintDialog::exec()
diff --git a/tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp b/tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp
index 8dcfab8e640..377226d5acd 100644
--- a/tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp
+++ b/tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp
@@ -24,6 +24,8 @@ private slots:
void getSetCheck();
void setMinMax();
void setFromTo();
+
+ void hideNativeByDestruction();
#endif
};
@@ -135,6 +137,20 @@ void tst_QAbstractPrintDialog::setFromTo()
QCOMPARE(obj1.maxPage(), 50);
}
+void tst_QAbstractPrintDialog::hideNativeByDestruction()
+{
+#ifdef Q_OS_WINDOWS
+ QSKIP("This test fails on windows, the QPrintDialog::setVisible implementation blocks");
+#endif
+
+ QWidget window;
+ QWidget *child = new QWidget(&window);
+ QPointer<QPrintDialog> dialog = new QPrintDialog(child);
+ window.show();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+ dialog->open();
+}
+
#endif
QTEST_MAIN(tst_QAbstractPrintDialog)