Hi there, I have fixed https://bugs.freedesktop.org/show_bug.cgi?id=42178 :-) , but I think an additional review will not be superfluous, since I am still a newbie.
The fact is SwDocShell::GetWrtShell() always returns 0 in page preview. And Writer dies due to that in "lcl_GetPrintUIOptions" function (sw/source/ui/uno/unotxdoc.cxx). The second patch makes testing of the first one easier. :-) Because, when you press "Cancel" in a print dialog, then make changes to a doc and open a print dialog again, you currently will not see any effect. Options will not be updated. The patch fixes this. If someone will approve the patches, I will push them. Thanks, Ivan
From bc7d667dccb8505516614daa5fb7da7996967617 Mon Sep 17 00:00:00 2001 From: Ivan Timofeev <timofeev....@gmail.com> Date: Wed, 16 Nov 2011 15:47:51 +0400 Subject: [PATCH 1/2] fix fdo#42178: crash when printing from Page Preview --- sw/source/ui/inc/pview.hxx | 1 + sw/source/ui/uno/unotxdoc.cxx | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/sw/source/ui/inc/pview.hxx b/sw/source/ui/inc/pview.hxx index e9902fb..329ba5e 100644 --- a/sw/source/ui/inc/pview.hxx +++ b/sw/source/ui/inc/pview.hxx @@ -273,6 +273,7 @@ public: void ShowVScrollbar(sal_Bool bShow); sal_uInt16 GetPageCount() const { return mnPageCount; } + sal_uInt16 GetSelectedPage() const {return aViewWin.SelectedPage();} sal_Bool HandleWheelCommands( const CommandEvent& ); diff --git a/sw/source/ui/uno/unotxdoc.cxx b/sw/source/ui/uno/unotxdoc.cxx index c849fa7..f4d2935 100644 --- a/sw/source/ui/uno/unotxdoc.cxx +++ b/sw/source/ui/uno/unotxdoc.cxx @@ -187,10 +187,19 @@ SwPrintUIOptions * lcl_GetPrintUIOptions( const SwPrintData &rPrintData = pDocShell->GetDoc()->getPrintData(); // Get current page number + sal_uInt16 nCurrentPage = 1; SwWrtShell* pSh = pDocShell->GetWrtShell(); - SwPaM* pShellCrsr = pSh->GetCrsr(); - sal_uInt16 nCurrentPage = pShellCrsr->GetPageNum(sal_True, 0); - + if (pSh) + { + SwPaM* pShellCrsr = pSh->GetCrsr(); + nCurrentPage = pShellCrsr->GetPageNum(sal_True, 0); + } + else + { + const SwPagePreView* pPreView = dynamic_cast< const SwPagePreView* >(pView); + if (pPreView) + nCurrentPage = pPreView->GetSelectedPage(); + } return new SwPrintUIOptions( nCurrentPage, bWebDoc, bSwSrcView, bHasSelection, bHasPostIts, rPrintData ); } -- 1.7.7.2
From e312651c459495c9604206a611a36462b12db654 Mon Sep 17 00:00:00 2001 From: Ivan Timofeev <timofeev....@gmail.com> Date: Wed, 16 Nov 2011 17:01:37 +0400 Subject: [PATCH 2/2] always refresh print ui options, not only after printing --- sw/source/ui/uno/unotxdoc.cxx | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/sw/source/ui/uno/unotxdoc.cxx b/sw/source/ui/uno/unotxdoc.cxx index f4d2935..4b545b4 100644 --- a/sw/source/ui/uno/unotxdoc.cxx +++ b/sw/source/ui/uno/unotxdoc.cxx @@ -2661,6 +2661,12 @@ uno::Sequence< beans::PropertyValue > SAL_CALL SwXTextDocument::getRenderer( // otherwise be provided here! // if( ! m_pRenderData ) // m_pRenderData = new SwRenderData; + + if (nRenderer == 0) + { + delete m_pPrintUIOptions; + m_pPrintUIOptions = 0; + } if (!m_pPrintUIOptions) m_pPrintUIOptions = lcl_GetPrintUIOptions( pDocShell, pView ); m_pPrintUIOptions->processProperties( rxOptions ); -- 1.7.7.2
_______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice