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

Reply via email to