[Libreoffice-commits] core.git: Branch 'libreoffice-6-4' - sw/inc sw/source writerfilter/source

Michael Stahl (via logerrit) logerrit at kemper.freedesktop.org
Fri Sep 25 01:38:30 UTC 2020


 sw/inc/IDocumentSettingAccess.hxx             |    1 +
 sw/source/core/doc/DocumentSettingManager.cxx |    7 +++++++
 sw/source/core/inc/DocumentSettingManager.hxx |    1 +
 sw/source/core/layout/calcmove.cxx            |   16 +++++++++++++---
 sw/source/core/layout/flowfrm.cxx             |   12 ++++++++++--
 sw/source/core/layout/frmtool.cxx             |    2 +-
 sw/source/filter/ww8/ww8par.cxx               |    1 +
 sw/source/filter/xml/xmlimp.cxx               |    7 +++++++
 sw/source/uibase/uno/SwXDocumentSettings.cxx  |   13 +++++++++++++
 writerfilter/source/filter/WriterFilter.cxx   |    1 +
 10 files changed, 55 insertions(+), 6 deletions(-)

New commits:
commit d731b65d3c6b58ed98ee60488d07e5cba653ede0
Author:     Michael Stahl <Michael.Stahl at cib.de>
AuthorDate: Wed Sep 23 15:14:08 2020 +0200
Commit:     Thorsten Behrens <Thorsten.Behrens at CIB.de>
CommitDate: Fri Sep 25 03:37:50 2020 +0200

    tdf#134782 sw: split AddParaSpacingToTableCells flag in 2
    
    commit 3cccdabf19a99fd3f657985c1822436d7679df2b "extend
    AddParaSpacingToTableCells with line spacing" changed how the
    ADD_PARA_SPACING_TO_TABLE_CELLS compat flag works, to improve interop
    with Word.
    
    This commit splits out the change as a separate new compat flag
    ADD_PARA_LINE_SPACING_TO_TABLE_CELLS ("AddParaLineSpacingToTableCells"),
    to preserve compatibility with ODT documents that were produced
    by LO < 6.4 (via SwXMLImport::SetConfigurationSettings()).
    
    New documents and WW8/RTF/DOCX import have both flags enabled.
    
    The combination false/true is invalid, and treated as equivalent
    to false/false.
    
    Change-Id: Ida20df8fe4a8192a714f91da95345f9726fd7d98
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103317
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at cib.de>
    (cherry picked from commit 38aa699f265c17548769aaa4f20e1ae35d18f202)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103359
    Reviewed-by: Thorsten Behrens <Thorsten.Behrens at CIB.de>

diff --git a/sw/inc/IDocumentSettingAccess.hxx b/sw/inc/IDocumentSettingAccess.hxx
index 814f139b64fc..5b093bc0d08a 100644
--- a/sw/inc/IDocumentSettingAccess.hxx
+++ b/sw/inc/IDocumentSettingAccess.hxx
@@ -47,6 +47,7 @@ enum class DocumentSettingId
     USE_HIRES_VIRTUAL_DEVICE,
     OLD_LINE_SPACING,
     ADD_PARA_SPACING_TO_TABLE_CELLS,
+    ADD_PARA_LINE_SPACING_TO_TABLE_CELLS,
     USE_FORMER_OBJECT_POS,
     USE_FORMER_TEXT_WRAPPING,
     CONSIDER_WRAP_ON_OBJECT_POSITION,
diff --git a/sw/source/core/doc/DocumentSettingManager.cxx b/sw/source/core/doc/DocumentSettingManager.cxx
index b7f3af73d2af..a29c5bc6275f 100644
--- a/sw/source/core/doc/DocumentSettingManager.cxx
+++ b/sw/source/core/doc/DocumentSettingManager.cxx
@@ -112,6 +112,7 @@ sw::DocumentSettingManager::DocumentSettingManager(SwDoc &rDoc)
         mbAddExternalLeading                = !aOptions.GetDefault( SvtCompatibilityEntry::Index::NoExtLeading );
         mbOldLineSpacing                    = aOptions.GetDefault( SvtCompatibilityEntry::Index::UseLineSpacing );
         mbAddParaSpacingToTableCells        = aOptions.GetDefault( SvtCompatibilityEntry::Index::AddTableSpacing );
+        mbAddParaLineSpacingToTableCells    = aOptions.GetDefault( SvtCompatibilityEntry::Index::AddTableSpacing ); // FIXME? separate UI?
         mbUseFormerObjectPos                = aOptions.GetDefault( SvtCompatibilityEntry::Index::UseObjectPositioning );
         mbUseFormerTextWrapping             = aOptions.GetDefault( SvtCompatibilityEntry::Index::UseOurTextWrapping );
         mbConsiderWrapOnObjPos              = aOptions.GetDefault( SvtCompatibilityEntry::Index::ConsiderWrappingStyle );
@@ -131,6 +132,7 @@ sw::DocumentSettingManager::DocumentSettingManager(SwDoc &rDoc)
         mbAddExternalLeading                = true;
         mbOldLineSpacing                    = false;
         mbAddParaSpacingToTableCells        = false;
+        mbAddParaLineSpacingToTableCells    = false;
         mbUseFormerObjectPos                = false;
         mbUseFormerTextWrapping             = false;
         mbConsiderWrapOnObjPos              = false;
@@ -167,6 +169,7 @@ bool sw::DocumentSettingManager::get(/*[in]*/ DocumentSettingId id) const
         case DocumentSettingId::OLD_NUMBERING: return mbOldNumbering;
         case DocumentSettingId::OLD_LINE_SPACING: return mbOldLineSpacing;
         case DocumentSettingId::ADD_PARA_SPACING_TO_TABLE_CELLS: return mbAddParaSpacingToTableCells;
+        case DocumentSettingId::ADD_PARA_LINE_SPACING_TO_TABLE_CELLS: return mbAddParaLineSpacingToTableCells;
         case DocumentSettingId::USE_FORMER_OBJECT_POS: return mbUseFormerObjectPos;
         case DocumentSettingId::USE_FORMER_TEXT_WRAPPING: return mbUseFormerTextWrapping;
         case DocumentSettingId::CONSIDER_WRAP_ON_OBJECT_POSITION: return mbConsiderWrapOnObjPos;
@@ -283,6 +286,9 @@ void sw::DocumentSettingManager::set(/*[in]*/ DocumentSettingId id, /*[in]*/ boo
         case DocumentSettingId::ADD_PARA_SPACING_TO_TABLE_CELLS:
             mbAddParaSpacingToTableCells = value;
             break;
+        case DocumentSettingId::ADD_PARA_LINE_SPACING_TO_TABLE_CELLS:
+            mbAddParaLineSpacingToTableCells = value;
+            break;
         case DocumentSettingId::USE_FORMER_OBJECT_POS:
             mbUseFormerObjectPos = value;
             break;
@@ -588,6 +594,7 @@ void sw::DocumentSettingManager::ReplaceCompatibilityOptions(const DocumentSetti
     mbAddExternalLeading = rSource.mbAddExternalLeading;
     mbOldLineSpacing = rSource.mbOldLineSpacing;
     mbAddParaSpacingToTableCells = rSource.mbAddParaSpacingToTableCells;
+    mbAddParaLineSpacingToTableCells = rSource.mbAddParaLineSpacingToTableCells;
     mbUseFormerObjectPos = rSource.mbUseFormerObjectPos;
     mbUseFormerTextWrapping = rSource.mbUseFormerTextWrapping;
     mbConsiderWrapOnObjPos = rSource.mbConsiderWrapOnObjPos;
diff --git a/sw/source/core/inc/DocumentSettingManager.hxx b/sw/source/core/inc/DocumentSettingManager.hxx
index e548c55a26b2..5a19e930f664 100644
--- a/sw/source/core/inc/DocumentSettingManager.hxx
+++ b/sw/source/core/inc/DocumentSettingManager.hxx
@@ -157,6 +157,7 @@ class DocumentSettingManager :
     bool mbPropLineSpacingShrinksFirstLine; // fdo#79602
     bool mbSubtractFlys; // tdf#86578
     bool mApplyParagraphMarkFormatToNumbering;
+    bool mbAddParaLineSpacingToTableCells; // tdf#125300 tdf#134782
 
     bool mbLastBrowseMode                           : 1;
     bool mbDisableOffPagePositioning; // tdf#112443
diff --git a/sw/source/core/layout/calcmove.cxx b/sw/source/core/layout/calcmove.cxx
index caa81ecbd182..b9687accdf90 100644
--- a/sw/source/core/layout/calcmove.cxx
+++ b/sw/source/core/layout/calcmove.cxx
@@ -134,7 +134,11 @@ bool SwContentFrame::ShouldBwdMoved( SwLayoutFrame *pNewUpper, bool & )
                         {
                             SwBorderAttrAccess aAccess( SwFrame::GetCache(), pLastFrame );
                             const SwBorderAttrs& rAttrs = *aAccess.Get();
-                            nNewTop -= rAttrs.GetULSpace().GetLower() + rAttrs.CalcLineSpacing();
+                            nNewTop -= rAttrs.GetULSpace().GetLower();
+                            if (rIDSA.get(DocumentSettingId::ADD_PARA_LINE_SPACING_TO_TABLE_CELLS))
+                            {
+                                nNewTop -= rAttrs.CalcLineSpacing();
+                            }
                         }
                     }
                 }
@@ -2147,10 +2151,16 @@ bool SwContentFrame::WouldFit_( SwTwips nSpace,
         }
 
         // Also consider lower spacing in table cells
+        IDocumentSettingAccess const& rIDSA(pNewUpper->GetFormat()->getIDocumentSettingAccess());
         if ( bRet && IsInTab() &&
-             pNewUpper->GetFormat()->getIDocumentSettingAccess().get(DocumentSettingId::ADD_PARA_SPACING_TO_TABLE_CELLS) )
+            rIDSA.get(DocumentSettingId::ADD_PARA_SPACING_TO_TABLE_CELLS))
         {
-            nSpace -= rAttrs.GetULSpace().GetLower() + rAttrs.CalcLineSpacing();
+            nSpace -= rAttrs.GetULSpace().GetLower();
+
+            if (rIDSA.get(DocumentSettingId::ADD_PARA_LINE_SPACING_TO_TABLE_CELLS))
+            {
+                nSpace -= rAttrs.CalcLineSpacing();
+            }
             if ( nSpace < 0 )
             {
                 bRet = false;
diff --git a/sw/source/core/layout/flowfrm.cxx b/sw/source/core/layout/flowfrm.cxx
index 6d83406583a7..d416b637c02f 100644
--- a/sw/source/core/layout/flowfrm.cxx
+++ b/sw/source/core/layout/flowfrm.cxx
@@ -1716,7 +1716,8 @@ SwTwips SwFlowFrame::CalcAddLowerSpaceAsLastInTableCell(
 {
     SwTwips nAdditionalLowerSpace = 0;
 
-    if ( m_rThis.GetUpper()->GetFormat()->getIDocumentSettingAccess().get(DocumentSettingId::ADD_PARA_SPACING_TO_TABLE_CELLS) )
+    IDocumentSettingAccess const& rIDSA(m_rThis.GetUpper()->GetFormat()->getIDocumentSettingAccess());
+    if (rIDSA.get(DocumentSettingId::ADD_PARA_SPACING_TO_TABLE_CELLS))
     {
         const SwFrame* pFrame = &m_rThis;
         if ( pFrame->IsSctFrame() )
@@ -1741,7 +1742,14 @@ SwTwips SwFlowFrame::CalcAddLowerSpaceAsLastInTableCell(
         }
 
         if (_pAttrs)
-            nAdditionalLowerSpace += _pAttrs->GetULSpace().GetLower() + _pAttrs->CalcLineSpacing();
+        {
+            nAdditionalLowerSpace += _pAttrs->GetULSpace().GetLower();
+
+            if (rIDSA.get(DocumentSettingId::ADD_PARA_LINE_SPACING_TO_TABLE_CELLS))
+            {
+                nAdditionalLowerSpace += _pAttrs->CalcLineSpacing();
+            }
+        }
     }
 
     return nAdditionalLowerSpace;
diff --git a/sw/source/core/layout/frmtool.cxx b/sw/source/core/layout/frmtool.cxx
index f839d0b946b4..a861dd60013b 100644
--- a/sw/source/core/layout/frmtool.cxx
+++ b/sw/source/core/layout/frmtool.cxx
@@ -2525,7 +2525,7 @@ void SwBorderAttrs::GetBottomLine_( const SwFrame& _rFrame )
 
 void SwBorderAttrs::CalcLineSpacing_()
 {
-    // tdf#125300 compatibility option AddParaSpacingToTableCells needs also line spacing
+    // tdf#125300 compatibility option AddParaLineSpacingToTableCells needs also line spacing
     const SvxLineSpacingItem &rSpace = m_rAttrSet.GetLineSpacing();
     if ( rSpace.GetInterLineSpaceRule() == SvxInterLineSpaceRule::Prop && rSpace.GetPropLineSpace() > 100 )
     {
diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index 166df718c720..44812a67ad1f 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -1891,6 +1891,7 @@ void SwWW8ImplReader::ImportDop()
     // #i25901# - set new compatibility option
     //      'Add paragraph and table spacing at bottom of table cells'
     m_rDoc.getIDocumentSettingAccess().set(DocumentSettingId::ADD_PARA_SPACING_TO_TABLE_CELLS, true);
+    m_rDoc.getIDocumentSettingAccess().set(DocumentSettingId::ADD_PARA_LINE_SPACING_TO_TABLE_CELLS, true);
 
     // #i11860# - set new compatibility option
     //      'Use former object positioning' to <false>
diff --git a/sw/source/filter/xml/xmlimp.cxx b/sw/source/filter/xml/xmlimp.cxx
index 5ca2c262496e..75766a7f8a64 100644
--- a/sw/source/filter/xml/xmlimp.cxx
+++ b/sw/source/filter/xml/xmlimp.cxx
@@ -1362,6 +1362,7 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC
     bool bUseOldNumbering = false;
     bool bAddExternalLeading = false;
     bool bAddParaSpacingToTableCells = false;
+    bool bAddParaLineSpacingToTableCells = false;
     bool bUseFormerLineSpacing = false;
     bool bUseFormerObjectPositioning = false;
     bool bUseFormerTextWrapping = false;
@@ -1434,6 +1435,8 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC
                     bAddExternalLeading = true;
                 else if ( rValue.Name == "AddParaSpacingToTableCells" )
                     bAddParaSpacingToTableCells = true;
+                else if ( rValue.Name == "AddParaLineSpacingToTableCells" )
+                    bAddParaLineSpacingToTableCells = true;
                 else if ( rValue.Name == "UseFormerLineSpacing" )
                     bUseFormerLineSpacing = true;
                 else if ( rValue.Name == "UseFormerObjectPositioning" )
@@ -1536,6 +1539,10 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC
         xProps->setPropertyValue( "AddParaSpacingToTableCells",
             makeAny( false ) );
     }
+    if (!bAddParaLineSpacingToTableCells)
+    {
+        xProps->setPropertyValue("AddParaLineSpacingToTableCells", makeAny(false));
+    }
 
     if( !bUseFormerTextWrapping )
     {
diff --git a/sw/source/uibase/uno/SwXDocumentSettings.cxx b/sw/source/uibase/uno/SwXDocumentSettings.cxx
index 51124bfe4071..1c437e021f93 100644
--- a/sw/source/uibase/uno/SwXDocumentSettings.cxx
+++ b/sw/source/uibase/uno/SwXDocumentSettings.cxx
@@ -98,6 +98,7 @@ enum SwDocumentSettingsPropertyHandles
     HANDLE_ALLOW_PRINTJOB_CANCEL,
     HANDLE_USE_FORMER_LINE_SPACING,
     HANDLE_ADD_PARA_SPACING_TO_TABLE_CELLS,
+    HANDLE_ADD_PARA_LINE_SPACING_TO_TABLE_CELLS,
     HANDLE_USE_FORMER_OBJECT_POSITIONING,
     HANDLE_USE_FORMER_TEXT_WRAPPING,
     HANDLE_CHANGES_PASSWORD,
@@ -185,6 +186,7 @@ static MasterPropertySetInfo * lcl_createSettingsInfo()
         { OUString("AllowPrintJobCancel"),        HANDLE_ALLOW_PRINTJOB_CANCEL,           cppu::UnoType<bool>::get(),           0},
         { OUString("UseFormerLineSpacing"),       HANDLE_USE_FORMER_LINE_SPACING,         cppu::UnoType<bool>::get(),           0},
         { OUString("AddParaSpacingToTableCells"), HANDLE_ADD_PARA_SPACING_TO_TABLE_CELLS, cppu::UnoType<bool>::get(),           0},
+        { OUString("AddParaLineSpacingToTableCells"), HANDLE_ADD_PARA_LINE_SPACING_TO_TABLE_CELLS, cppu::UnoType<bool>::get(),           0},
         { OUString("UseFormerObjectPositioning"), HANDLE_USE_FORMER_OBJECT_POSITIONING,   cppu::UnoType<bool>::get(),           0},
         { OUString("UseFormerTextWrapping"),      HANDLE_USE_FORMER_TEXT_WRAPPING,        cppu::UnoType<bool>::get(),           0},
         { OUString("RedlineProtectionKey"),       HANDLE_CHANGES_PASSWORD,                cppu::UnoType< cppu::UnoSequenceType<sal_Int8> >::get(),           0},
@@ -630,6 +632,12 @@ void SwXDocumentSettings::_setSingleValue( const comphelper::PropertyInfo & rInf
             mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::ADD_PARA_SPACING_TO_TABLE_CELLS, bTmp);
         }
         break;
+        case HANDLE_ADD_PARA_LINE_SPACING_TO_TABLE_CELLS:
+        {
+            bool bTmp = *o3tl::doAccess<bool>(rValue);
+            mpDoc->getIDocumentSettingAccess().set(DocumentSettingId::ADD_PARA_LINE_SPACING_TO_TABLE_CELLS, bTmp);
+        }
+        break;
         case HANDLE_USE_FORMER_OBJECT_POSITIONING:
         {
             bool bTmp = *o3tl::doAccess<bool>(rValue);
@@ -1188,6 +1196,11 @@ void SwXDocumentSettings::_getSingleValue( const comphelper::PropertyInfo & rInf
             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::ADD_PARA_SPACING_TO_TABLE_CELLS);
         }
         break;
+        case HANDLE_ADD_PARA_LINE_SPACING_TO_TABLE_CELLS:
+        {
+            rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::ADD_PARA_LINE_SPACING_TO_TABLE_CELLS);
+        }
+        break;
         case HANDLE_USE_FORMER_OBJECT_POSITIONING:
         {
             rValue <<= mpDoc->getIDocumentSettingAccess().get(DocumentSettingId::USE_FORMER_OBJECT_POS);
diff --git a/writerfilter/source/filter/WriterFilter.cxx b/writerfilter/source/filter/WriterFilter.cxx
index 3b2405867aad..9f6c6d2881ac 100644
--- a/writerfilter/source/filter/WriterFilter.cxx
+++ b/writerfilter/source/filter/WriterFilter.cxx
@@ -293,6 +293,7 @@ void WriterFilter::setTargetDocument(const uno::Reference< lang::XComponent >& x
     xSettings->setPropertyValue("DoNotResetParaAttrsForNumFont", uno::makeAny(false));
     xSettings->setPropertyValue("UseFormerLineSpacing", uno::makeAny(false));
     xSettings->setPropertyValue("AddParaSpacingToTableCells", uno::makeAny(true));
+    xSettings->setPropertyValue("AddParaLineSpacingToTableCells", uno::makeAny(true));
     xSettings->setPropertyValue("UseFormerObjectPositioning", uno::makeAny(false));
     xSettings->setPropertyValue("ConsiderTextWrapOnObjPos", uno::makeAny(true));
     xSettings->setPropertyValue("UseFormerTextWrapping", uno::makeAny(false));


More information about the Libreoffice-commits mailing list