[Libreoffice] [PATCH] Fix for fdo#42178

Michael Stahl mstahl at redhat.com
Wed Nov 16 08:30:26 PST 2011


On 16/11/11 17:15, Ivan Timofeev wrote:
> 2011/11/16 Michael Stahl <mstahl at 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



More information about the LibreOffice mailing list