[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-5.3' - sw/source

Szymon Kłos szymon.klos at collabora.com
Sat Dec 9 23:39:40 UTC 2017


 sw/source/core/edit/edfcol.cxx |   17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

New commits:
commit cfa177e84de5b04be6ca9dadf62519fac5ed392f
Author: Szymon Kłos <szymon.klos at collabora.com>
Date:   Fri Dec 8 22:15:21 2017 +0100

    tdf#114338 don't crash on watermark insert w/ existing header
    
    Change-Id: I63abaf48c33d6660f1829b7d503de295e4a57f9c
    Reviewed-on: https://gerrit.libreoffice.org/46126
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/46156
    Reviewed-by: Andras Timar <andras.timar at collabora.com>
    Tested-by: Andras Timar <andras.timar at collabora.com>

diff --git a/sw/source/core/edit/edfcol.cxx b/sw/source/core/edit/edfcol.cxx
index ce41b3e7a064..913fec92c2de 100644
--- a/sw/source/core/edit/edfcol.cxx
+++ b/sw/source/core/edit/edfcol.cxx
@@ -118,8 +118,10 @@ bool lcl_hasField(const uno::Reference<text::XText>& xText, const OUString& rSer
 }
 
 /// Search for a frame with WATERMARK_NAME in name of type rServiceName in xText. Returns found name in rShapeName.
-uno::Reference<drawing::XShape> lcl_getWatermark(const uno::Reference<text::XText>& xText, const OUString& rServiceName, OUString& rShapeName)
+uno::Reference<drawing::XShape> lcl_getWatermark(const uno::Reference<text::XText>& xText,
+    const OUString& rServiceName, OUString& rShapeName, bool& bSuccess)
 {
+    bSuccess = false;
     uno::Reference<container::XEnumerationAccess> xParagraphEnumerationAccess(xText, uno::UNO_QUERY);
     uno::Reference<container::XEnumeration> xParagraphs = xParagraphEnumerationAccess->createEnumeration();
     while (xParagraphs->hasMoreElements())
@@ -128,6 +130,8 @@ uno::Reference<drawing::XShape> lcl_getWatermark(const uno::Reference<text::XTex
         if (!xTextPortionEnumerationAccess.is())
             continue;
 
+        bSuccess = true;
+
         uno::Reference<container::XEnumeration> xTextPortions = xTextPortionEnumerationAccess->createEnumeration();
         while (xTextPortions->hasMoreElements())
         {
@@ -316,7 +320,8 @@ SfxWatermarkItem SwEditShell::GetWatermark()
 
         OUString aShapeServiceName = "com.sun.star.drawing.CustomShape";
         OUString sWatermark = "";
-        uno::Reference<drawing::XShape> xWatermark = lcl_getWatermark(xHeaderText, aShapeServiceName, sWatermark);
+        bool bSuccess = false;
+        uno::Reference<drawing::XShape> xWatermark = lcl_getWatermark(xHeaderText, aShapeServiceName, sWatermark, bSuccess);
 
         if (xWatermark.is())
         {
@@ -350,10 +355,14 @@ void lcl_placeWatermarkInHeader(const SfxWatermarkItem& rWatermark,
                             const uno::Reference<beans::XPropertySet>& xPageStyle,
                             const uno::Reference<text::XText>& xHeaderText)
 {
+    if (!xHeaderText.is())
+        return;
+
     uno::Reference<lang::XMultiServiceFactory> xMultiServiceFactory(xModel, uno::UNO_QUERY);
     OUString aShapeServiceName = "com.sun.star.drawing.CustomShape";
     OUString sWatermark = WATERMARK_NAME;
-    uno::Reference<drawing::XShape> xWatermark = lcl_getWatermark(xHeaderText, aShapeServiceName, sWatermark);
+    bool bSuccess = false;
+    uno::Reference<drawing::XShape> xWatermark = lcl_getWatermark(xHeaderText, aShapeServiceName, sWatermark, bSuccess);
 
     bool bDeleteWatermark = rWatermark.GetText().isEmpty();
     if (xWatermark.is())
@@ -387,7 +396,7 @@ void lcl_placeWatermarkInHeader(const SfxWatermarkItem& rWatermark,
         }
     }
 
-    if (!xWatermark.is() && !bDeleteWatermark)
+    if (bSuccess && !xWatermark.is() && !bDeleteWatermark)
     {
         OUString sFont = rWatermark.GetFont();
         sal_Int16 nAngle = rWatermark.GetAngle();


More information about the Libreoffice-commits mailing list