[Libreoffice-commits] core.git: 2 commits - sw/source

Michael Stahl (via logerrit) logerrit at kemper.freedesktop.org
Thu Aug 13 14:58:56 UTC 2020


 sw/source/core/undo/undobj.cxx    |   12 +++++++-----
 sw/source/filter/ww8/wrtw8nds.cxx |   24 +++++++++++++++++++++++-
 2 files changed, 30 insertions(+), 6 deletions(-)

New commits:
commit 68cc91cd2c461b7062c3f3b89b2c677e41c9a8d4
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Wed Aug 12 17:07:18 2020 +0200
Commit:     Michael Stahl <michael.stahl at cib.de>
CommitDate: Thu Aug 13 16:58:17 2020 +0200

    sw: MS Word export: don't insert section breaks in field instructions
    
    MSWordExportBase::NeedTextNodeSplit() simply uses the soft-page-break
    positions to potentially insert section breaks - but now that Writer can
    display field instructions, it's quite silly to insert section breaks
    inside them.
    
    Change-Id: Ie57e6281a0287aac36984e5467920852db19a8ad
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100661
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>

diff --git a/sw/source/filter/ww8/wrtw8nds.cxx b/sw/source/filter/ww8/wrtw8nds.cxx
index 4dd1f15395bb..3492549c6d73 100644
--- a/sw/source/filter/ww8/wrtw8nds.cxx
+++ b/sw/source/filter/ww8/wrtw8nds.cxx
@@ -2149,7 +2149,29 @@ bool MSWordExportBase::NeedSectionBreak( const SwNode& rNd ) const
 
 bool MSWordExportBase::NeedTextNodeSplit( const SwTextNode& rNd, SwSoftPageBreakList& pList ) const
 {
-    rNd.fillSoftPageBreakList( pList );
+    SwSoftPageBreakList tmp;
+    rNd.fillSoftPageBreakList(tmp);
+    // hack: move the break behind any field marks; currently we can't hide the
+    // field mark instruction so the layout position is quite meaningless
+    IDocumentMarkAccess const& rIDMA(*rNd.GetDoc()->getIDocumentMarkAccess());
+    sal_Int32 pos(-1);
+    for (auto const& it : tmp)
+    {
+        if (pos < it) // previous one might have skipped over it
+        {
+            pos = it;
+            while (auto const*const pMark = rIDMA.getFieldmarkFor(SwPosition(const_cast<SwTextNode&>(rNd), pos)))
+            {
+                if (pMark->GetMarkEnd().nNode != rNd)
+                {
+                    pos = rNd.Len(); // skip everything
+                    break;
+                }
+                pos = pMark->GetMarkEnd().nContent.GetIndex(); // no +1, it's behind the char
+            }
+            pList.insert(pos);
+        }
+    }
     pList.insert(0);
     pList.insert( rNd.GetText().getLength() );
     return pList.size() > 2 && NeedSectionBreak( rNd );
commit 5364c0815734d864e3c26090f1219d58a4022f8b
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Wed Aug 12 16:32:07 2020 +0200
Commit:     Michael Stahl <michael.stahl at cib.de>
CommitDate: Thu Aug 13 16:58:09 2020 +0200

    sw: avoid assert when deletion starts at fieldmark end
    
    This hit assert(bSavePos && bSaveOtherPos);
    
    Tweak SwUndoSaveContent::DelContentIndex() for fieldmarks to only accept
    an equal end position if the start position was in range as well.
    
    (regression from 24fd14b387dca458a1b6e9415e936d26562ddb1e)
    
    Change-Id: If6c9b049193bb7f1bc39ec66d1c965512f9d6ec1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100660
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>

diff --git a/sw/source/core/undo/undobj.cxx b/sw/source/core/undo/undobj.cxx
index 268e0ea5e3d6..9e043b1b1e23 100644
--- a/sw/source/core/undo/undobj.cxx
+++ b/sw/source/core/undo/undobj.cxx
@@ -1118,12 +1118,14 @@ void SwUndoSaveContent::DelContentIndex( const SwPosition& rMark,
             if( pBkmk->IsExpanded() &&
                 *pStt <= pBkmk->GetOtherMarkPos() && pBkmk->GetOtherMarkPos() <= *pEnd )
             {
-                if ( bSavePos || bSaveOtherPos
+                assert(!bSaveOtherPos);
+                if (   bSavePos
                     || (*pStt < pBkmk->GetOtherMarkPos() && pBkmk->GetOtherMarkPos() < *pEnd)
-                    || type == IDocumentMarkAccess::MarkType::TEXT_FIELDMARK
-                    || type == IDocumentMarkAccess::MarkType::CHECKBOX_FIELDMARK
-                    || type == IDocumentMarkAccess::MarkType::DROPDOWN_FIELDMARK
-                    || type == IDocumentMarkAccess::MarkType::DATE_FIELDMARK)
+                    || (bMaybe
+                        && (   type == IDocumentMarkAccess::MarkType::TEXT_FIELDMARK
+                            || type == IDocumentMarkAccess::MarkType::CHECKBOX_FIELDMARK
+                            || type == IDocumentMarkAccess::MarkType::DROPDOWN_FIELDMARK
+                            || type == IDocumentMarkAccess::MarkType::DATE_FIELDMARK)))
                 {
                     if( bMaybe )
                         bSavePos = true;


More information about the Libreoffice-commits mailing list