diff options
author | Michael Stahl <michael.stahl@allotropia.de> | 2022-01-19 19:35:15 +0100 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2022-01-27 10:40:41 +0100 |
commit | 71dea9a8aa8bd853acff6310c424376d5c73c4f2 (patch) | |
tree | 7942281c4f5c4ee8782719b97bd2c3114b8c06c3 | |
parent | 0b5c5a4691cdfeeac3d00a74dd7d7e1fe0af5fb6 (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>
(cherry picked from commit 94ef342679629c76eff2686243b423e926bbf680)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128960
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
-rw-r--r-- | writerfilter/source/dmapper/PropertyMap.cxx | 13 | ||||
-rw-r--r-- | writerfilter/source/dmapper/PropertyMap.hxx | 3 |
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 ); |