Details
-
Bug
-
Resolution: Unresolved
-
P2: Important
-
None
-
5.15.1
-
None
Description
I guess with the fixes for QTBUG-25383 the following code makes it to qprintdialog_mac.mm
- (void)printPanelDidEnd:(NSPrintPanel *)printPanel returnCode:(int)returnCode contextInfo:(void *)contextInfo { ... else if (dest == kPMDestinationPreview) { static QTemporaryDir printPreviews; auto documentName = printer->docName(); if (documentName.isEmpty()) documentName = QGuiApplication::applicationDisplayName(); auto fileName = printPreviews.filePath(QString(QLatin1String("%1.pdf")).arg(documentName)); printer->setOutputFileName(fileName); // Ideally we would have a callback when the PDF engine is done writing // to the file, and open Preview in response to that. Lacking that, we // use the quick and dirty assumption that the the print operation will // happen synchronously after the dialog is accepted, so we can defer // the opening of the file to the next runloop pass. dispatch_async(dispatch_get_main_queue(), ^{ [NSWorkspace.sharedWorkspace openFile:fileName.toNSString()]; }); } ... }
Well, your assumption can be wrong and lets preview.app open with error, because the pdf creation isn't finished.
Our Apps needs the information of the printdialog before the painting begins (one-sided, two-sided, paper-format, etc. ). There are many sites to be painted and printed (so we use progressbars and stuff) in one operation and - surprise - the main_queue finds time to proceed [NSWorkspace.sharedWorkspace openFile]. Specially if the Mac is one of the quicker ones. And there is absolut nothing I can do in my code to workaround this behavior.
I had to revet this 5.15 - changes in qprintdialog_mac.mm to Qt 5.12. (And the changes in qprinter.cpp, so that a choosen kPMDestinationPreview works with no installed printers).