summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorMichael Stahl <michael.stahl@allotropia.de>2022-01-19 19:35:15 +0100
committerMichael Stahl <michael.stahl@allotropia.de>2022-01-26 18:48:48 +0100
commit94ef342679629c76eff2686243b423e926bbf680 (patch)
tree8b0a5a97111f97e1bb43cf8e0f66847fd5ced0c8 /writerfilter
parent6ad9a3d74ef6eae3e645df12dedbe059acc180c4 (diff)
tdf#139737 sw_fieldmarkhide: writerfilter: don't copy header/footer
... when inserting into an existing document. The header/footer will not be removed by SwUndoInserts::UndoImpl() and thus the extra nodes will screw up subsequent Undo actions. Inserting a header from a file is already disabled, but there is a function that copies from a preceding page style that was missing a check. This never worked and reportedly crashes since commit 4dc1615c80e8e66d339dc86fa95bbc76e884d988 Change-Id: I895d867ee9fd30a936144492f3ee1633d045fe8f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128635 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/PropertyMap.cxx13
-rw-r--r--writerfilter/source/dmapper/PropertyMap.hxx3
2 files changed, 11 insertions, 5 deletions
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx
index 58871cc04538..dabdff851a9c 100644
--- a/writerfilter/source/dmapper/PropertyMap.cxx
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -882,13 +882,18 @@ void SectionPropertyMap::CopyHeaderFooterTextProperty( const uno::Reference< bea
}
// Copy headers and footers from the previous page style.
-void SectionPropertyMap::CopyHeaderFooter( const uno::Reference< beans::XPropertySet >& xPrevStyle,
+void SectionPropertyMap::CopyHeaderFooter( DomainMapper_Impl& rDM_Impl,
+ const uno::Reference< beans::XPropertySet >& xPrevStyle,
const uno::Reference< beans::XPropertySet >& xStyle,
bool bOmitRightHeader,
bool bOmitLeftHeader,
bool bOmitRightFooter,
bool bOmitLeftFooter )
{
+ if (!rDM_Impl.IsNewDoc())
+ { // see also DomainMapper_Impl::PushPageHeaderFooter()
+ return; // tdf#139737 SwUndoInserts cannot deal with new header/footer
+ }
bool bHasPrevHeader = false;
bool bHeaderIsShared = true;
OUString sHeaderIsOn = getPropertyName( PROP_HEADER_IS_ON );
@@ -966,13 +971,13 @@ void SectionPropertyMap::CopyLastHeaderFooter( bool bFirstPage, DomainMapper_Imp
if ( bFirstPage )
{
- CopyHeaderFooter( xPrevStyle, xStyle,
+ CopyHeaderFooter(rDM_Impl, xPrevStyle, xStyle,
!m_bFirstPageHeaderLinkToPrevious, true,
!m_bFirstPageFooterLinkToPrevious, true );
}
else
{
- CopyHeaderFooter( xPrevStyle, xStyle,
+ CopyHeaderFooter(rDM_Impl, xPrevStyle, xStyle,
!m_bDefaultHeaderLinkToPrevious,
!(m_bEvenPageHeaderLinkToPrevious && bUseEvenPages),
!m_bDefaultFooterLinkToPrevious,
@@ -1851,7 +1856,7 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl )
rDM_Impl.GetPageStyles()->insertByName( evenOddStyleName, uno::makeAny( evenOddStyle ) );
evenOddStyle->setPropertyValue( "HeaderIsOn", uno::makeAny( false ) );
evenOddStyle->setPropertyValue( "FooterIsOn", uno::makeAny( false ) );
- CopyHeaderFooter( pageProperties, evenOddStyle );
+ CopyHeaderFooter(rDM_Impl, pageProperties, evenOddStyle);
*pageStyle = evenOddStyleName; // And use it instead of the original one (which is set as follow of this one).
if ( m_nBreakType == static_cast<sal_Int32>(NS_ooxml::LN_Value_ST_SectionMark_evenPage) )
evenOddStyle->setPropertyValue( getPropertyName( PROP_PAGE_STYLE_LAYOUT ), uno::makeAny( style::PageStyleLayout_LEFT ) );
diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx
index 3314ce7451ae..b03ef7bd664c 100644
--- a/writerfilter/source/dmapper/PropertyMap.hxx
+++ b/writerfilter/source/dmapper/PropertyMap.hxx
@@ -299,7 +299,8 @@ private:
void CopyLastHeaderFooter( bool bFirstPage, DomainMapper_Impl& rDM_Impl );
- static void CopyHeaderFooter( const css::uno::Reference< css::beans::XPropertySet >& xPrevStyle,
+ static void CopyHeaderFooter( DomainMapper_Impl& rDM_Impl,
+ const css::uno::Reference< css::beans::XPropertySet >& xPrevStyle,
const css::uno::Reference< css::beans::XPropertySet >& xStyle,
bool bOmitRightHeader = false, bool bOmitLeftHeader = false,
bool bOmitRightFooter = false, bool bOmitLeftFooter = false );