Fix previewing a preview on reentrance

Make the print preview more tolerant of reentrance by avoiding
previewing itself.

Change-Id: Ia4774cb51bdda7d311414c4e2f9c2bfbed4f187f
Pick-to: 6.7 6.6 6.5
Fixes: QTBUG-122749
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
bb10
Allan Sandfeld Jensen 2024-02-29 15:18:19 +01:00
parent c606739ad1
commit 367e6ff0b2
3 changed files with 9 additions and 0 deletions

View File

@ -129,6 +129,11 @@ QList<const QPicture *> QPrinterPrivate::previewPages() const
return QList<const QPicture *>();
}
bool QPrinterPrivate::previewMode() const
{
return (previewEngine != nullptr) && (previewEngine == printEngine);
}
void QPrinterPrivate::setPreviewMode(bool enable)
{
Q_Q(QPrinter);

View File

@ -70,6 +70,7 @@ public:
#if QT_CONFIG(printpreviewwidget)
QList<const QPicture *> previewPages() const;
void setPreviewMode(bool);
bool previewMode() const;
#endif
void setProperty(QPrintEngine::PrintEnginePropertyKey key, const QVariant &value);

View File

@ -361,6 +361,9 @@ void QPrintPreviewWidgetPrivate::generatePreview()
//### emit paintRequested() until the user changes some parameter
Q_Q(QPrintPreviewWidget);
// Avoid previewing a preview
if (printer->d_func()->previewMode())
return;
printer->d_func()->setPreviewMode(true);
emit q->paintRequested(printer);
printer->d_func()->setPreviewMode(false);