On 16/11/11 17:15, Ivan Timofeev wrote: > 2011/11/16 Michael Stahl <mst...@redhat.com>: >> your workaround looks good (but please add an assertion for the case >> that we don't get any page number, i.e. OSL_ENSURE(pPreView,...)) > > Ok! > >> isn't m_pPrintUIOptions supposed to be deleted when >> SwXTextDocument::render is called for the last page (and there is >> specific code in vcl to ensure that this is done even on cancel)? >> >> hmm... could be that i broke that... is the m_pPrintUIOptions really not >> deleted for you? > > Well, digging deeper... :-) > > vcl/source/gdi/print3.cxx, PrinterController::getPageFile. You added > > if (mpImplData->meJobState != view::PrintableState_JOB_STARTED) > { // rhbz#657394: check that we are still printing... > return PrinterController::PageSize(); > } > > Removing of these helps! If I have understood the code correctly:
oh noes, i had feared something like that :-/ > When canceling in the print dialog, PrinterController::abortJob() is > called, and abortJob calls getPageFile. Your code above returns > *before* the call to printPage and this causes troubles so that the > last page will not be printed. > > What is the solution for this? i have added this because the preceding call to getPageParametersProtected could have aborted the printing. but actually i think we should be able to survive a call to render() even if the document has been closed already (this should throw an exception and call abortJob again, no problem...). please try it out: remove the 4 lines, then try print and cancel, then try print and close-the-document (to get a high page count just print 1000 copies), see that we survive that in Calc and Writer. > Regards, > Ivan _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice