diff --git a/mozilla/layout/base/nsDocumentViewer.cpp b/mozilla/layout/base/nsDocumentViewer.cpp index 2593714dcff..2448c68c9c1 100644 --- a/mozilla/layout/base/nsDocumentViewer.cpp +++ b/mozilla/layout/base/nsDocumentViewer.cpp @@ -1425,23 +1425,6 @@ DocumentViewerImpl::Destroy() } } -#ifdef NS_PRINTING - if (mPrintEngine) { - // This code was moved earlier to fix a crash when a document was - // destroyed while it was in print preview mode, see bug 396024 -#ifdef NS_PRINT_PREVIEW - PRBool doingPrintPreview; - mPrintEngine->GetDoingPrintPreview(&doingPrintPreview); - if (doingPrintPreview) { - mPrintEngine->FinishPrintPreview(); - } -#endif - - mPrintEngine->Destroy(); - mPrintEngine = nsnull; - } -#endif - Hide(); // This is after Hide() so that the user doesn't see the inputs clear. @@ -1501,6 +1484,21 @@ DocumentViewerImpl::Destroy() // destructor might never be called (especially if we're being // used from JS. +#ifdef NS_PRINTING + if (mPrintEngine) { +#ifdef NS_PRINT_PREVIEW + PRBool doingPrintPreview; + mPrintEngine->GetDoingPrintPreview(&doingPrintPreview); + if (doingPrintPreview) { + mPrintEngine->FinishPrintPreview(); + } +#endif + + mPrintEngine->Destroy(); + mPrintEngine = nsnull; + } +#endif + // Avoid leaking the old viewer. if (mPreviousViewer) { mPreviousViewer->Destroy(); diff --git a/mozilla/layout/printing/nsPrintEngine.cpp b/mozilla/layout/printing/nsPrintEngine.cpp index c91415541dc..01a05aac3d4 100644 --- a/mozilla/layout/printing/nsPrintEngine.cpp +++ b/mozilla/layout/printing/nsPrintEngine.cpp @@ -3127,6 +3127,11 @@ nsPrintEngine::FinishPrintPreview() #ifdef NS_PRINT_PREVIEW + if (!mPrt) { + /* we're already finished with print preview */ + return rv; + } + rv = DocumentReadyForPrinting(); SetIsCreatingPrintPreview(PR_FALSE);