summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx22
1 files changed, 17 insertions, 5 deletions
diff --git a/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx b/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx
index 0f864625dc75..6d6d54d7ac4a 100644
--- a/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx
+++ b/sw/source/writerfilter/dmapper/DomainMapper_Impl.cxx
@@ -3775,14 +3775,26 @@ void DomainMapper_Impl::ConvertHeaderFooterToTextFrame(bool bDynamicHeightTop, b
namespace
{
// Determines if the XText content is empty (no text, no shapes, no tables)
-bool isContentEmpty(uno::Reference<text::XText> const& xText)
+bool isContentEmpty(uno::Reference<text::XText> const& xText, uno::Reference<text::XTextDocument> const& xTextDocument)
{
if (!xText.is())
return true; // no XText means it's empty
- uno::Reference<css::lang::XServiceInfo> xTextServiceInfo(xText, uno::UNO_QUERY);
- if (xTextServiceInfo && xTextServiceInfo->getImplementationName() == "SwXHeadFootText")
- return false;
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xTextDocument, uno::UNO_QUERY);
+ auto xDrawPage = xDrawPageSupplier->getDrawPage();
+ if (xDrawPage && xDrawPage->hasElements())
+ {
+ for (sal_Int32 i = 0; i < xDrawPage->getCount(); ++i)
+ {
+ uno::Reference<text::XTextContent> xShape(xDrawPage->getByIndex(i), uno::UNO_QUERY);
+ if (xShape.is())
+ {
+ uno::Reference<text::XTextRange> xAnchor = xShape->getAnchor();
+ if (xAnchor.is() && xAnchor->getText() == xText)
+ return false;
+ }
+ }
+ }
uno::Reference<container::XEnumerationAccess> xEnumAccess(xText->getText(), uno::UNO_QUERY);
uno::Reference<container::XEnumeration> xEnum = xEnumAccess->createEnumeration();
@@ -3941,7 +3953,7 @@ void DomainMapper_Impl::checkIfHeaderFooterIsEmpty(PagePartType ePagePartType, P
if (!xPageStyle.is())
return;
- bool bEmpty = isContentEmpty(m_aTextAppendStack.top().xTextAppend);
+ bool bEmpty = isContentEmpty(m_aTextAppendStack.top().xTextAppend, GetTextDocument());
if (eType == PageType::FIRST && bEmpty)
{