[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.4' - 8 commits - cui/source sw/qa sw/source toolkit/qa writerfilter/source

Michael Stahl (via logerrit) logerrit at kemper.freedesktop.org
Fri Jun 12 16:39:02 UTC 2020


 cui/source/customize/SvxNotebookbarConfigPage.cxx       |    7 +-
 sw/qa/extras/ooxmlexport/data/tdf120394.docx            |binary
 sw/qa/extras/ooxmlexport/data/tdf132754.docx            |binary
 sw/qa/extras/ooxmlexport/ooxmlexport14.cxx              |   41 +++++++++++++
 sw/qa/extras/rtfimport/rtfimport.cxx                    |    5 -
 sw/source/core/doc/DocumentContentOperationsManager.cxx |    6 +-
 sw/source/core/doc/docbm.cxx                            |    7 ++
 sw/source/core/doc/docedt.cxx                           |    2 
 sw/source/core/doc/number.cxx                           |    7 ++
 sw/source/core/inc/mvsave.hxx                           |    2 
 sw/source/core/inc/rolbck.hxx                           |    2 
 sw/source/core/undo/rolbck.cxx                          |    8 ++
 sw/source/core/undo/undobj.cxx                          |   17 +++++
 sw/source/filter/ww8/wrtw8num.cxx                       |   30 +++++-----
 toolkit/qa/cppunit/EventContainer.cxx                   |    2 
 writerfilter/source/dmapper/NumberingManager.cxx        |   48 +++-------------
 16 files changed, 115 insertions(+), 69 deletions(-)

New commits:
commit d5fd91f8e5b9c25a620537c3acc3340231e463ed
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Wed Jun 10 18:51:37 2020 +0200
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Fri Jun 12 16:32:52 2020 +0100

    tdf#132254 sw: fix block selection copy reversed order
    
    The problem is that SwEditShell::CopySelToDoc() relies on the passed
    target SwPosition being after the target range by CopyRange(), but due
    to an erroneous update of aInsPos in CopyImplImpl() it was at the
    beginning of the target range.
    
    (regression from 28b77c89dfcafae82cf2a6d85731b643ff9290e5)
    
    Change-Id: Ie0846bd44f9349517878efcca996440bede05611
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96063
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>
    (cherry picked from commit 63a43218c369a43624e6bdbe880b7caa40a3b61a)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96092
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx
index 8ba8a4c5a136..403089bdc586 100644
--- a/sw/source/core/doc/DocumentContentOperationsManager.cxx
+++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx
@@ -4833,10 +4833,10 @@ bool DocumentContentOperationsManager::CopyImplImpl(SwPaM& rPam, SwPosition& rPo
                     }
 
                     // copy at-char flys in rPam
-                    aInsPos = *pDestTextNd; // update to new (start) node for flys
+                    SwNodeIndex temp(*pDestTextNd); // update to new (start) node for flys
                     // tdf#126626 prevent duplicate Undos
                     ::sw::UndoGuard const ug(pDoc->GetIDocumentUndoRedo());
-                    CopyFlyInFlyImpl(aRg, &rPam, aInsPos, false);
+                    CopyFlyInFlyImpl(aRg, &rPam, temp, false);
 
                     break;
                 }
commit 471e033a2dabda43933034be86475387d3c82aea
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Wed Jun 10 17:21:45 2020 +0200
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Fri Jun 12 16:32:46 2020 +0100

    crashtesting: sw: fix export of ooo24576-1.doc and ooo79410-1.sxw to odt
    
    Crashes because an at-char fly has its anchor node deleted, and during
    deletion of its text frame its SwAnchoredObject is updated, which
    asserts because of inconsistent anchor node in the fly and
    mpAnchorFrame; the immediate cause of the inconsistency is that
    SwNodes::RemoveNode() changed the fly's anchor node.
    
    The root cause is that in the sw_JoinText(bJoinPrev=true) code, a fly
    anchored at the end of the deleted node isn't moved to the surviving
    node.
    
    SwTextNode::JoinPrev() uses different arguments to
    ContentIdxStore::Save(), so use the same here.
    
    The implementation of several ContentIdxStore functions, including
    ContentIdxStoreImpl::SaveFlys(), ignore positions that are equal to the
    passed nContent index, so passing in SwTextNode::Len() looks wrong.
    
    (crash is regression from 98d1622b3721fe899c4e1faa0b4cc35695253014)
    
    Change-Id: I3a4d54258611da6b15223273a187c39770caa8e2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93583
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>
    (cherry picked from commit b2b234269b13d5dfd8e7123a25d282d88fee33a0)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96104
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/sw/source/core/doc/docedt.cxx b/sw/source/core/doc/docedt.cxx
index f6e38600f1ba..a695cca98713 100644
--- a/sw/source/core/doc/docedt.cxx
+++ b/sw/source/core/doc/docedt.cxx
@@ -410,7 +410,7 @@ bool sw_JoinText( SwPaM& rPam, bool bJoinPrev )
                 pOldTextNd->FormatToTextAttr( pTextNd );
 
                 const std::shared_ptr< sw::mark::ContentIdxStore> pContentStore(sw::mark::ContentIdxStore::Create());
-                pContentStore->Save( pDoc, aOldIdx.GetIndex(), pOldTextNd->Len() );
+                pContentStore->Save(pDoc, aOldIdx.GetIndex(), SAL_MAX_INT32);
 
                 SwIndex aAlphaIdx(pTextNd);
                 pOldTextNd->CutText( pTextNd, aAlphaIdx, SwIndex(pOldTextNd),
commit faf8549510aa3d17a14b85108087e6f3f7201ade
Author:     Vasily Melenchuk <vasily.melenchuk at cib.de>
AuthorDate: Sun May 17 13:35:46 2020 +0300
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Fri Jun 12 16:32:39 2020 +0100

    tdf#120394: DOCX list import: simplify zero width space hack
    
    Since introducion of list format string hack with creation
    of zero-width-space can be much more simple. It was being
    used to indicate existing, but empty list label suffix to
    avoid stripping down numbering.
    
    Change-Id: I9a0c6047f806b2c656ef5dbab0c6b38200818bd2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94383
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95346

diff --git a/sw/qa/extras/ooxmlexport/data/tdf120394.docx b/sw/qa/extras/ooxmlexport/data/tdf120394.docx
new file mode 100644
index 000000000000..39bd5886c0fe
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf120394.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
index 46b4741d7436..17ce04efd87b 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
@@ -638,6 +638,31 @@ DECLARE_OOXMLEXPORT_TEST(testTdf129353, "tdf129353.docx")
                          aIndexString);
 }
 
+DECLARE_OOXMLEXPORT_TEST(testTdf120394, "tdf120394.docx")
+{
+    CPPUNIT_ASSERT_EQUAL(1, getPages());
+    {
+        uno::Reference<beans::XPropertySet> xPara(getParagraph(1), uno::UNO_QUERY);
+        CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(0), getProperty<sal_Int16>(xPara, "NumberingLevel"));
+        CPPUNIT_ASSERT_EQUAL(OUString("1"), getProperty<OUString>(xPara, "ListLabelString"));
+    }
+    {
+        uno::Reference<beans::XPropertySet> xPara(getParagraph(2), uno::UNO_QUERY);
+        CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(1), getProperty<sal_Int16>(xPara, "NumberingLevel"));
+        CPPUNIT_ASSERT_EQUAL(OUString(CHAR_ZWSP), getProperty<OUString>(xPara, "ListLabelString"));
+    }
+    {
+        uno::Reference<beans::XPropertySet> xPara(getParagraph(3), uno::UNO_QUERY);
+        CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(1), getProperty<sal_Int16>(xPara, "NumberingLevel"));
+        CPPUNIT_ASSERT_EQUAL(OUString(CHAR_ZWSP), getProperty<OUString>(xPara, "ListLabelString"));
+    }
+    {
+        uno::Reference<beans::XPropertySet> xPara(getParagraph(5), uno::UNO_QUERY);
+        CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(2), getProperty<sal_Int16>(xPara, "NumberingLevel"));
+        CPPUNIT_ASSERT_EQUAL(OUString("1.2.1"), getProperty<OUString>(xPara, "ListLabelString"));
+    }
+}
+
 DECLARE_OOXMLEXPORT_TEST(testHyphenationAuto, "hyphenation.odt")
 {
     // Explicitly set hyphenation=auto on document level
diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx
index 3fe90033be59..d2c2d4d24c8f 100644
--- a/sw/qa/extras/rtfimport/rtfimport.cxx
+++ b/sw/qa/extras/rtfimport/rtfimport.cxx
@@ -341,8 +341,7 @@ CPPUNIT_TEST_FIXTURE(Test, testFdo49692)
 
         if (rProp.Name == "Suffix")
         {
-            OUString aExpected(u'\x200B');
-            CPPUNIT_ASSERT_EQUAL(aExpected, rProp.Value.get<OUString>());
+            CPPUNIT_ASSERT(rProp.Value.get<OUString>().isEmpty());
         }
     }
 }
@@ -1367,7 +1366,7 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf78506)
 
         if (rProp.Name == "Suffix")
             // This was '0', invalid \levelnumbers wasn't ignored.
-            CPPUNIT_ASSERT_EQUAL(CHAR_ZWSP, rProp.Value.get<OUString>().toChar());
+            CPPUNIT_ASSERT(rProp.Value.get<OUString>().isEmpty());
     }
 }
 
diff --git a/sw/source/core/doc/number.cxx b/sw/source/core/doc/number.cxx
index 481ebfada8eb..c636273e6f54 100644
--- a/sw/source/core/doc/number.cxx
+++ b/sw/source/core/doc/number.cxx
@@ -664,6 +664,13 @@ OUString SwNumRule::MakeNumString( const SwNumberTree::tNumberVector & rNumVecto
                     if (nPosition >= 0)
                         sLevelFormat = sLevelFormat.replaceAt(nPosition, sFind.getLength(), sReplacement);
                 }
+
+                // As a fallback: caller code expects nonempty string as a result.
+                // But if we have empty string (and had no errors before) this is valid result.
+                // So use classical hack with zero-width-space as a string filling.
+                if (sLevelFormat.isEmpty())
+                    sLevelFormat = OUStringChar(CHAR_ZWSP);
+
                 aStr = sLevelFormat;
             }
             else
diff --git a/sw/source/filter/ww8/wrtw8num.cxx b/sw/source/filter/ww8/wrtw8num.cxx
index bde15c7ea279..ec6df09838b5 100644
--- a/sw/source/filter/ww8/wrtw8num.cxx
+++ b/sw/source/filter/ww8/wrtw8num.cxx
@@ -503,12 +503,7 @@ void MSWordExportBase::NumberingLevel(
     const vcl::Font* pBulletFont=nullptr;
     rtl_TextEncoding eChrSet=0;
     FontFamily eFamily=FAMILY_DECORATIVE;
-    if (rRule.Get(nLvl).HasListFormat())
-    {
-        // Nothing to construct: we have it already
-        sNumStr = rRule.Get(nLvl).GetListFormat();
-    }
-    else if (SVX_NUM_CHAR_SPECIAL == rFormat.GetNumberingType() ||
+    if (SVX_NUM_CHAR_SPECIAL == rFormat.GetNumberingType() ||
         SVX_NUM_BITMAP == rFormat.GetNumberingType())
     {
         // Use bullet
@@ -516,7 +511,9 @@ void MSWordExportBase::NumberingLevel(
     }
     else
     {
-        // Construct list format string from prefix, level numbers and suffix
+        // Create level string
+        // For docx it is not the best way: we can just take it from rRule.Get(nLvl).GetListFormat()
+        // But for compatibility with doc we follow same routine
         if (SVX_NUM_NUMBER_NONE != rFormat.GetNumberingType())
         {
             sal_uInt8* pLvlPos = aNumLvlPos;
@@ -527,20 +524,23 @@ void MSWordExportBase::NumberingLevel(
             // now search the nums in the string
             for (sal_uInt8 i = 0; i <= nLvl; ++i)
             {
-                OUString sSrch( OUString::number( i ));
-                sal_Int32 nFnd = sNumStr.indexOf( sSrch );
-                if( -1 != nFnd )
+                OUString sSrch(OUString::number(i));
+                sal_Int32 nFnd = sNumStr.indexOf(sSrch);
+                if (-1 != nFnd)
                 {
-                    *pLvlPos = static_cast<sal_uInt8>(nFnd + rFormat.GetPrefix().getLength() + 1 );
+                    *pLvlPos = static_cast<sal_uInt8>(nFnd + rFormat.GetPrefix().getLength() + 1);
                     ++pLvlPos;
-                    sNumStr = sNumStr.replaceAt( nFnd, 1, OUString(static_cast<char>(i)) );
+                    sNumStr = sNumStr.replaceAt(nFnd, 1, OUString(static_cast<char>(i)));
                 }
             }
         }
 
-        if (!rFormat.GetPrefix().isEmpty())
-            sNumStr = rFormat.GetPrefix() + sNumStr;
-        sNumStr += rFormat.GetSuffix();
+        if (!rRule.Get(nLvl).HasListFormat())
+        {
+            if (!rFormat.GetPrefix().isEmpty())
+                sNumStr = rFormat.GetPrefix() + sNumStr;
+            sNumStr += rFormat.GetSuffix();
+        }
     }
 
     if (SVX_NUM_CHAR_SPECIAL == rFormat.GetNumberingType() ||
diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx
index e29639cec28b..30846dc3c290 100644
--- a/writerfilter/source/dmapper/NumberingManager.cxx
+++ b/writerfilter/source/dmapper/NumberingManager.cxx
@@ -207,10 +207,6 @@ uno::Sequence<beans::PropertyValue> ListLevel::GetLevelProperties(bool bDefaults
     {
         if (m_xGraphicBitmap.is())
             nNumberFormat = style::NumberingType::BITMAP;
-        else if (m_sBulletChar.isEmpty() && nNumberFormat != style::NumberingType::CHAR_SPECIAL)
-            // w:lvlText is empty, that means no numbering in Word.
-            // CHAR_SPECIAL is handled separately below.
-            nNumberFormat = style::NumberingType::NUMBER_NONE;
         aNumberingProperties.push_back(lcl_makePropVal(PROP_NUMBERING_TYPE, nNumberFormat));
     }
 
@@ -548,40 +544,14 @@ void ListDef::CreateNumberingRules( DomainMapper& rDMapper,
                 if (pLevel.get() && !pLevel->GetBulletChar().isEmpty())
                     sText = pLevel->GetBulletChar( );
 
-                if (sText.isEmpty())
-                {
-                    // Empty <w:lvlText>? Then put a Unicode "zero width space" as a suffix, so LabelFollowedBy is still shown, as in Word.
-                    // With empty suffix, Writer does not show LabelFollowedBy, either.
-                    OUString sSuffix;
-                    auto it = std::find_if(aLvlProps.begin(), aLvlProps.end(), [](const beans::PropertyValue& rValue) { return rValue.Name == "NumberingType"; });
-                    if (it != aLvlProps.end())
-                    {
-                        sal_Int16 nNumberFormat = it->Value.get<sal_Int16>();
-
-                        // No need for a zero width space without a real LabelFollowedBy.
-                        bool bLabelFollowedBy = true;
-                        it = std::find_if(aLvlProps.begin(), aLvlProps.end(), [](const beans::PropertyValue& rValue) { return rValue.Name == "LabelFollowedBy"; });
-                        if (it != aLvlProps.end())
-                        {
-                            sal_Int16 nValue;
-                            if (it->Value >>= nValue)
-                                bLabelFollowedBy = nValue != SvxNumberFormat::NOTHING;
-                        }
+                aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_PREFIX), OUString("")));
+                aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_SUFFIX), OUString("")));
+                aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_LIST_FORMAT), sText));
 
-                        if (bLabelFollowedBy && nNumberFormat == style::NumberingType::NUMBER_NONE)
-                            sSuffix = OUString(u'\x200B');
-                    }
-                    aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_SUFFIX), sSuffix));
-                }
-                else
-                {
-                    aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_LIST_FORMAT), sText));
-
-                    // Total count of replacement holders is determining amount of required parent numbering to include
-                    // TODO: not sure how "%" symbol is escaped. This is not supported yet
-                    sal_Int16 nParentNum = comphelper::string::getTokenCount(sText, '%');
-                    aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_PARENT_NUMBERING), nParentNum));
-                }
+                // Total count of replacement holders is determining amount of required parent numbering to include
+                // TODO: not sure how "%" symbol is escaped. This is not supported yet
+                sal_Int16 nParentNum = comphelper::string::getTokenCount(sText, '%');
+                aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_PARENT_NUMBERING), nParentNum));
 
                 aLvlProps.push_back(comphelper::makePropertyValue(getPropertyName(PROP_POSITION_AND_SPACE_MODE), sal_Int16(text::PositionAndSpaceMode::LABEL_ALIGNMENT)));
 
commit 2a483742ced96bc2bcd64156d87f2cfc71a64341
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Thu Jun 11 15:26:27 2020 +0200
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Fri Jun 12 16:32:34 2020 +0100

    tdf#132744 sw: fix subtle difference when checking end of section
    
    In a few places, such as CopyFlyInFlyImpl() and DelFlyInRange(),
    the passed start/end positions aren't necessarily from a cursor but can
    be section start/end nodes instead.
    
    (regression from 971205dc2110c1c23ff1db1fc4041e2babf6fa9f)
    
    Change-Id: I1fb24f1f9d027aa3685ac5a7459891cb8c2b9a41
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96124
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>
    (cherry picked from commit cc4b5091e739116a7ec83513fa1cd856f0130330)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96147
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/sw/source/core/undo/undobj.cxx b/sw/source/core/undo/undobj.cxx
index e6a6d5a509d7..eb42e7dfbc0c 100644
--- a/sw/source/core/undo/undobj.cxx
+++ b/sw/source/core/undo/undobj.cxx
@@ -1532,6 +1532,19 @@ static bool IsAtStartOfSection(SwPosition const& rAnchorPos)
     return node == rAnchorPos.nNode && rAnchorPos.nContent == 0;
 }
 
+/// passed start / end position could be on section start / end node
+static bool IsAtEndOfSection2(SwPosition const& rPos)
+{
+    return rPos.nNode.GetNode().IsEndNode()
+        || IsAtEndOfSection(rPos);
+}
+
+static bool IsAtStartOfSection2(SwPosition const& rPos)
+{
+    return rPos.nNode.GetNode().IsStartNode()
+        || IsAtStartOfSection(rPos);
+}
+
 static bool IsNotBackspaceHeuristic(
         SwPosition const& rStart, SwPosition const& rEnd)
 {
@@ -1573,13 +1586,13 @@ bool IsDestroyFrameAnchoredAtChar(SwPosition const & rAnchorPos,
                 && ((rStart.nNode != rEnd.nNode && rStart.nContent == 0
                         // but not if the selection is backspace/delete!
                         && IsNotBackspaceHeuristic(rStart, rEnd))
-                    || (IsAtStartOfSection(rAnchorPos) && IsAtEndOfSection(rEnd)))))
+                    || (IsAtStartOfSection(rAnchorPos) && IsAtEndOfSection2(rEnd)))))
         && ((rAnchorPos < rEnd)
             || (rAnchorPos == rEnd
                 // special case: fully deleted node
                 && ((rEnd.nNode != rStart.nNode && rEnd.nContent == rEnd.nNode.GetNode().GetTextNode()->Len()
                         && IsNotBackspaceHeuristic(rStart, rEnd))
-                    || (IsAtEndOfSection(rAnchorPos) && IsAtStartOfSection(rStart)))));
+                    || (IsAtEndOfSection(rAnchorPos) && IsAtStartOfSection2(rStart)))));
 }
 
 bool IsSelectFrameAnchoredAtPara(SwPosition const & rAnchorPos,
commit 9b388da45565e2a1a522a4ec8fbca3fde53ca00e
Author:     Serge Krot <Serge.Krot at cib.de>
AuthorDate: Wed Jun 10 19:15:41 2020 +0200
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Fri Jun 12 16:32:26 2020 +0100

    tdf#101856 copy missing bookmark properties
    
    - in case of undo/redo
    - in case of copying bookmark
    
    Change-Id: Ia21f42973b0e7c2cc4abfe2febe9818509aec4d5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96038
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx
index 49920f65d503..8ba8a4c5a136 100644
--- a/sw/source/core/doc/DocumentContentOperationsManager.cxx
+++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx
@@ -297,6 +297,8 @@ namespace sw
             {
                 pNewBookmark->SetKeyCode(pOldBookmark->GetKeyCode());
                 pNewBookmark->SetShortName(pOldBookmark->GetShortName());
+                pNewBookmark->Hide(pOldBookmark->IsHidden());
+                pNewBookmark->SetHideCondition(pOldBookmark->GetHideCondition());
             }
             ::sw::mark::IFieldmark* const pNewFieldmark =
                 dynamic_cast< ::sw::mark::IFieldmark* const >(pNewMark);
diff --git a/sw/source/core/doc/docbm.cxx b/sw/source/core/doc/docbm.cxx
index 5e5063b72f92..17db4aed5f4e 100644
--- a/sw/source/core/doc/docbm.cxx
+++ b/sw/source/core/doc/docbm.cxx
@@ -1630,7 +1630,7 @@ SaveBookmark::SaveBookmark(
     const SwNodeIndex & rMvPos,
     const SwIndex* pIdx)
     : m_aName(rBkmk.GetName())
-    , m_aShortName()
+    , m_bHidden(false)
     , m_aCode()
     , m_eOrigBkmType(IDocumentMarkAccess::GetType(rBkmk))
 {
@@ -1639,6 +1639,8 @@ SaveBookmark::SaveBookmark(
     {
         m_aShortName = pBookmark->GetShortName();
         m_aCode = pBookmark->GetKeyCode();
+        m_bHidden = pBookmark->IsHidden();
+        m_aHideCondition = pBookmark->GetHideCondition();
 
         ::sfx2::Metadatable const*const pMetadatable(
                 dynamic_cast< ::sfx2::Metadatable const* >(pBookmark));
@@ -1707,6 +1709,9 @@ void SaveBookmark::SetInDoc(
         {
             pBookmark->SetKeyCode(m_aCode);
             pBookmark->SetShortName(m_aShortName);
+            pBookmark->Hide(m_bHidden);
+            pBookmark->SetHideCondition(m_aHideCondition);
+
             if (m_pMetadataUndo)
             {
                 ::sfx2::Metadatable * const pMeta(
diff --git a/sw/source/core/inc/mvsave.hxx b/sw/source/core/inc/mvsave.hxx
index bdbab23f08ab..c472b6f7bc1a 100644
--- a/sw/source/core/inc/mvsave.hxx
+++ b/sw/source/core/inc/mvsave.hxx
@@ -58,6 +58,8 @@ namespace sw { namespace mark
     private:
             OUString const m_aName;
             OUString m_aShortName;
+            bool m_bHidden;
+            OUString m_aHideCondition;
             vcl::KeyCode m_aCode;
             IDocumentMarkAccess::MarkType const m_eOrigBkmType;
             sal_uLong m_nNode1;
diff --git a/sw/source/core/inc/rolbck.hxx b/sw/source/core/inc/rolbck.hxx
index 2abe1d590b88..7cceb86a58e6 100644
--- a/sw/source/core/inc/rolbck.hxx
+++ b/sw/source/core/inc/rolbck.hxx
@@ -249,6 +249,8 @@ class SwHistoryBookmark : public SwHistoryHint
     private:
         const OUString m_aName;
         OUString m_aShortName;
+        bool m_bHidden;
+        OUString m_aHideCondition;
         vcl::KeyCode m_aKeycode;
         const sal_uLong m_nNode;
         const sal_uLong m_nOtherNode;
diff --git a/sw/source/core/undo/rolbck.cxx b/sw/source/core/undo/rolbck.cxx
index ef4815a1cff4..50ff24aa4d98 100644
--- a/sw/source/core/undo/rolbck.cxx
+++ b/sw/source/core/undo/rolbck.cxx
@@ -559,8 +559,7 @@ SwHistoryBookmark::SwHistoryBookmark(
     bool bSaveOtherPos)
     : SwHistoryHint(HSTRY_BOOKMARK)
     , m_aName(rBkmk.GetName())
-    , m_aShortName()
-    , m_aKeycode()
+    , m_bHidden(false)
     , m_nNode(bSavePos ?
         rBkmk.GetMarkPos().nNode.GetIndex() : 0)
     , m_nOtherNode(bSaveOtherPos ?
@@ -579,6 +578,8 @@ SwHistoryBookmark::SwHistoryBookmark(
     {
         m_aKeycode = pBookmark->GetKeyCode();
         m_aShortName = pBookmark->GetShortName();
+        m_bHidden = pBookmark->IsHidden();
+        m_aHideCondition = pBookmark->GetHideCondition();
 
         ::sfx2::Metadatable const*const pMetadatable(
                 dynamic_cast< ::sfx2::Metadatable const* >(pBookmark));
@@ -653,6 +654,9 @@ void SwHistoryBookmark::SetInDoc( SwDoc* pDoc, bool )
         {
             pBookmark->SetKeyCode(m_aKeycode);
             pBookmark->SetShortName(m_aShortName);
+            pBookmark->Hide(m_bHidden);
+            pBookmark->SetHideCondition(m_aHideCondition);
+
             if (m_pMetadataUndo)
             {
                 ::sfx2::Metadatable * const pMeta(
commit 5e1b1db3ce535debfa4a489d1d02ba14b31094a0
Author:     Vasily Melenchuk <vasily.melenchuk at cib.de>
AuthorDate: Sun May 10 00:43:59 2020 +0300
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Fri Jun 12 16:29:28 2020 +0100

    tdf#132754: DOCX import: changed default list start nubmer
    
    Default value for list numbering startAt is zero. If it is not
    proveded numbering starts from this value.
    
    Change-Id: I2cf7be9063e7bfb8b72d6ba77fcd9507e33bb848
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93899
    Tested-by: Jenkins
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>
    (cherry picked from commit f8211e84a5239de25fe6dc45a4bb6b6f8673a1ee)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96048

diff --git a/sw/qa/extras/ooxmlexport/data/tdf132754.docx b/sw/qa/extras/ooxmlexport/data/tdf132754.docx
new file mode 100644
index 000000000000..baec54f5e0d7
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/tdf132754.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
index 5a99b366caa0..46b4741d7436 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport14.cxx
@@ -595,6 +595,22 @@ DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf128889, "tdf128889.fodt")
     assertXPath(pXml, "/w:document/w:body/w:p[1]/w:r[2]/w:br", "type", "page");
 }
 
+DECLARE_OOXMLEXPORT_EXPORTONLY_TEST(testTdf132754, "tdf132754.docx")
+{
+    {
+        uno::Reference<beans::XPropertySet> xPara(getParagraph(1), uno::UNO_QUERY);
+        CPPUNIT_ASSERT_EQUAL(OUString("0.0.0."), getProperty<OUString>(xPara, "ListLabelString"));
+    }
+    {
+        uno::Reference<beans::XPropertySet> xPara(getParagraph(2), uno::UNO_QUERY);
+        CPPUNIT_ASSERT_EQUAL(OUString("0.0.1."), getProperty<OUString>(xPara, "ListLabelString"));
+    }
+    {
+        uno::Reference<beans::XPropertySet> xPara(getParagraph(3), uno::UNO_QUERY);
+        CPPUNIT_ASSERT_EQUAL(OUString("0.0.2."), getProperty<OUString>(xPara, "ListLabelString"));
+    }
+}
+
 DECLARE_OOXMLEXPORT_TEST(testTdf129353, "tdf129353.docx")
 {
     CPPUNIT_ASSERT_EQUAL(8, getParagraphs());
diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx
index be74368bfcf7..e29639cec28b 100644
--- a/writerfilter/source/dmapper/NumberingManager.cxx
+++ b/writerfilter/source/dmapper/NumberingManager.cxx
@@ -189,8 +189,10 @@ uno::Sequence<beans::PropertyValue> ListLevel::GetLevelProperties(bool bDefaults
 {
     std::vector<beans::PropertyValue> aNumberingProperties;
 
-    if( m_nIStartAt >= 0)
+    if (m_nIStartAt >= 0)
         aNumberingProperties.push_back(lcl_makePropVal<sal_Int16>(PROP_START_WITH, m_nIStartAt) );
+    else if (bDefaults)
+        aNumberingProperties.push_back(lcl_makePropVal<sal_Int16>(PROP_START_WITH, 0));
 
     sal_Int16 nNumberFormat = -1;
     if (m_nNFC == NS_ooxml::LN_Value_ST_NumberFormat_custom)
commit 6838dd995587b47875c7d43ab9c3e4516170f8e6
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Wed Jun 10 15:53:56 2020 +0100
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Fri Jun 12 16:29:13 2020 +0100

    Resolves: tdf#133862 crash in customize toolbar in embedded math
    
    Change-Id: I2fc7f3620145e48516c3ca73c0a5d08dce11d78a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96035
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofauli at libreoffice.org>

diff --git a/cui/source/customize/SvxNotebookbarConfigPage.cxx b/cui/source/customize/SvxNotebookbarConfigPage.cxx
index c8270b941385..198a19f57782 100644
--- a/cui/source/customize/SvxNotebookbarConfigPage.cxx
+++ b/cui/source/customize/SvxNotebookbarConfigPage.cxx
@@ -433,6 +433,8 @@ void SvxNotebookbarConfigPage::SelectElement()
     OString sUIFileUIPath = CustomNotebookbarGenerator::getSystemPath(
         CustomNotebookbarGenerator::getCustomizedUIPath());
     xmlDocPtr pDoc = xmlParseFile(sUIFileUIPath.getStr());
+    if (!pDoc)
+        return;
     xmlNodePtr pNodePtr = xmlDocGetRootElement(pDoc);
 
     std::vector<NotebookbarEntries> aEntries;
@@ -494,10 +496,7 @@ void SvxNotebookbarConfigPage::SelectElement()
 
     aEntries.clear();
 
-    if (pDoc != nullptr)
-    {
-        xmlFreeDoc(pDoc);
-    }
+    xmlFreeDoc(pDoc);
 }
 
 SvxNotebookbarEntriesListBox::SvxNotebookbarEntriesListBox(std::unique_ptr<weld::TreeView> xParent,
commit a856c45f59dee01a4d21b7ccc97606d474581e7c
Author:     Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
AuthorDate: Mon May 11 07:48:23 2020 +0200
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Fri Jun 12 16:29:09 2020 +0100

    Fix 32bit linux build
    
    Change-Id: I4faf3fb20c632163f98264d162bbf85f80b3603d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93797
    Tested-by: Jenkins
    Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
    (cherry picked from commit fa0d576378cafab396a3fb75b1dbe1905d5df9ce)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96090
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>

diff --git a/toolkit/qa/cppunit/EventContainer.cxx b/toolkit/qa/cppunit/EventContainer.cxx
index 300c8e5adb74..97a125c60824 100644
--- a/toolkit/qa/cppunit/EventContainer.cxx
+++ b/toolkit/qa/cppunit/EventContainer.cxx
@@ -70,7 +70,7 @@ CPPUNIT_TEST_FIXTURE(EventContainerTest, testInsertOrder)
 
     Sequence<OUString> aEventNames(xEvents->getElementNames());
     sal_Int32 nEventCount = aEventNames.getLength();
-    CPPUNIT_ASSERT_EQUAL(4, nEventCount);
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(4), nEventCount);
 
     CPPUNIT_ASSERT_EQUAL(OUString("b"), aEventNames[0]);
     CPPUNIT_ASSERT_EQUAL(OUString("a"), aEventNames[1]);


More information about the Libreoffice-commits mailing list