summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/inc/redline.hxx4
-rw-r--r--sw/qa/extras/uiwriter/uiwriter2.cxx7
-rw-r--r--sw/source/core/doc/DocumentRedlineManager.cxx6
-rw-r--r--sw/source/core/doc/docredln.cxx22
4 files changed, 33 insertions, 6 deletions
diff --git a/sw/inc/redline.hxx b/sw/inc/redline.hxx
index c75cb932d35d..c7cddc9fad3a 100644
--- a/sw/inc/redline.hxx
+++ b/sw/inc/redline.hxx
@@ -55,9 +55,10 @@ class SW_DLLPUBLIC SwRedlineExtraData_FormatColl : public SwRedlineExtraData
OUString m_sFormatNm;
std::unique_ptr<SfxItemSet> m_pSet;
sal_uInt16 m_nPoolId;
+ bool m_bFormatAll; // don't strip the last paragraph mark
public:
SwRedlineExtraData_FormatColl( const OUString& rColl, sal_uInt16 nPoolFormatId,
- const SfxItemSet* pSet = nullptr );
+ const SfxItemSet* pSet = nullptr, bool bFormatAll = true );
virtual ~SwRedlineExtraData_FormatColl() override;
virtual SwRedlineExtraData* CreateNew() const override;
virtual void Reject( SwPaM& rPam ) const override;
@@ -66,6 +67,7 @@ public:
const OUString& GetFormatName() const { return m_sFormatNm; }
void SetItemSet( const SfxItemSet& rSet );
SfxItemSet* GetItemSet( ) const { return m_pSet.get(); }
+ void SetFormatAll( bool bAll ) { m_bFormatAll = bAll; }
};
class SwRedlineExtraData_Format : public SwRedlineExtraData
diff --git a/sw/qa/extras/uiwriter/uiwriter2.cxx b/sw/qa/extras/uiwriter/uiwriter2.cxx
index 992ffe190d88..6ae3c023439c 100644
--- a/sw/qa/extras/uiwriter/uiwriter2.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter2.cxx
@@ -572,6 +572,13 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf119571_keep_numbering_with_Reject)
sNumName = getProperty<OUString>(getParagraph(3), "NumberingStyleName");
CPPUNIT_ASSERT_MESSAGE("Missing numbering style", !sNumName.isEmpty());
CPPUNIT_ASSERT_MESSAGE("Not a bulleted list item", sNumName != "Outline");
+
+ // third paragraph: normal text without numbering
+
+ CPPUNIT_ASSERT_EQUAL(OUString("Standard"),
+ getProperty<OUString>(getParagraph(4), "ParaStyleName"));
+ sNumName = getProperty<OUString>(getParagraph(4), "NumberingStyleName");
+ CPPUNIT_ASSERT_MESSAGE("Bad numbering", sNumName.isEmpty());
}
CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf109376_redline)
diff --git a/sw/source/core/doc/DocumentRedlineManager.cxx b/sw/source/core/doc/DocumentRedlineManager.cxx
index 1ed3851c90b2..2372429afc70 100644
--- a/sw/source/core/doc/DocumentRedlineManager.cxx
+++ b/sw/source/core/doc/DocumentRedlineManager.cxx
@@ -2026,6 +2026,7 @@ DocumentRedlineManager::AppendRedline(SwRangeRedline* pNewRedl, bool const bCall
SwTextNode* pDelNode = pStt->nNode.GetNode().GetTextNode();
SwTextNode* pTextNode;
SwNodeIndex aIdx( pEnd->nNode.GetNode() );
+ bool bFirst = true;
while (pDelNode != nullptr && pTextNd != nullptr && pDelNd->GetIndex() < pTextNd->GetIndex())
{
@@ -2045,6 +2046,8 @@ DocumentRedlineManager::AppendRedline(SwRangeRedline* pNewRedl, bool const bCall
if (pExtraData)
{
std::unique_ptr<SwRedlineExtraData_FormatColl> xRedlineExtraData;
+ if (!bFirst)
+ pExtraData->SetFormatAll(false);
xRedlineExtraData.reset(pExtraData);
pPar->SetExtraData( xRedlineExtraData.get() );
}
@@ -2054,6 +2057,9 @@ DocumentRedlineManager::AppendRedline(SwRangeRedline* pNewRedl, bool const bCall
lcl_CopyStyle(*pStt, aPos);
}
pTextNd = SwNodes::GoPrevious( &aIdx );
+
+ if (bFirst)
+ bFirst = false;
}
}
}
diff --git a/sw/source/core/doc/docredln.cxx b/sw/source/core/doc/docredln.cxx
index 08bfa9e51c77..2585b1208751 100644
--- a/sw/source/core/doc/docredln.cxx
+++ b/sw/source/core/doc/docredln.cxx
@@ -753,8 +753,9 @@ bool SwRedlineExtraData::operator == ( const SwRedlineExtraData& ) const
SwRedlineExtraData_FormatColl::SwRedlineExtraData_FormatColl( const OUString& rColl,
sal_uInt16 nPoolFormatId,
- const SfxItemSet* pItemSet )
- : m_sFormatNm(rColl), m_nPoolId(nPoolFormatId)
+ const SfxItemSet* pItemSet,
+ bool bFormatAll )
+ : m_sFormatNm(rColl), m_nPoolId(nPoolFormatId), m_bFormatAll(bFormatAll)
{
if( pItemSet && pItemSet->Count() )
m_pSet.reset( new SfxItemSet( *pItemSet ) );
@@ -766,7 +767,7 @@ SwRedlineExtraData_FormatColl::~SwRedlineExtraData_FormatColl()
SwRedlineExtraData* SwRedlineExtraData_FormatColl::CreateNew() const
{
- return new SwRedlineExtraData_FormatColl( m_sFormatNm, m_nPoolId, m_pSet.get() );
+ return new SwRedlineExtraData_FormatColl( m_sFormatNm, m_nPoolId, m_pSet.get(), m_bFormatAll );
}
void SwRedlineExtraData_FormatColl::Reject( SwPaM& rPam ) const
@@ -781,11 +782,21 @@ void SwRedlineExtraData_FormatColl::Reject( SwPaM& rPam ) const
RedlineFlags eOld = pDoc->getIDocumentRedlineAccess().GetRedlineFlags();
pDoc->getIDocumentRedlineAccess().SetRedlineFlags_intern(eOld & ~RedlineFlags(RedlineFlags::On | RedlineFlags::Ignore));
+ SwPaM aPam( *rPam.GetMark(), *rPam.GetPoint() );
+
+ if ( !m_bFormatAll )
+ {
+ // don't reject the format of the next paragraph (that is handled by the next redline)
+ aPam.GetPoint()->nNode--;
+ SwContentNode* pNode = aPam.GetPoint()->nNode.GetNode().GetContentNode();
+ aPam.GetPoint()->nContent.Assign( pNode, pNode->Len() );
+ }
+
if( pColl )
- pDoc->SetTextFormatColl( rPam, pColl, false );
+ pDoc->SetTextFormatColl( aPam, pColl, false );
if( m_pSet )
- pDoc->getIDocumentContentOperations().InsertItemSet( rPam, *m_pSet );
+ pDoc->getIDocumentContentOperations().InsertItemSet( aPam, *m_pSet );
pDoc->getIDocumentRedlineAccess().SetRedlineFlags_intern( eOld );
}
@@ -794,6 +805,7 @@ bool SwRedlineExtraData_FormatColl::operator == ( const SwRedlineExtraData& r) c
{
const SwRedlineExtraData_FormatColl& rCmp = static_cast<const SwRedlineExtraData_FormatColl&>(r);
return m_sFormatNm == rCmp.m_sFormatNm && m_nPoolId == rCmp.m_nPoolId &&
+ m_bFormatAll == rCmp.m_bFormatAll &&
( ( !m_pSet && !rCmp.m_pSet ) ||
( m_pSet && rCmp.m_pSet && *m_pSet == *rCmp.m_pSet ) );
}