writerfilter/source/dmapper/DomainMapper_Impl.cxx |   22 +++++-----------------
 1 file changed, 5 insertions(+), 17 deletions(-)

New commits:
commit 4126c6b94e87f7ad2a1aa93d66bbb3edf67ec790
Author:     Noel Grandin <[email protected]>
AuthorDate: Mon Mar 25 10:39:41 2024 +0200
Commit:     Xisco Fauli <[email protected]>
CommitDate: Mon Apr 8 16:55:02 2024 +0200

    tdf#158556 speedup docx load
    
    If we want to know if an XText is a header/footer object, no need to
    loop over the draw objects, we can just query its service name.
    
    Reduces load time from 167s to 97s
    
    Change-Id: I10158c11dd24c4945b3ea6cfed4916717bd4f2f8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165269
    Tested-by: Noel Grandin <[email protected]>
    Reviewed-by: Noel Grandin <[email protected]>
    (cherry picked from commit ab29c857c669bcca3d8eea8a5a9e6ad5eae622d7)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165618
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <[email protected]>

diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 2b9091452dde..028b4b4c9aee 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -3793,26 +3793,14 @@ 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, 
uno::Reference<text::XTextDocument> const& xTextDocument)
+bool isContentEmpty(uno::Reference<text::XText> const& xText)
 {
     if (!xText.is())
         return true; // no XText means it's empty
 
-    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<css::lang::XServiceInfo> xTextServiceInfo(xText, 
uno::UNO_QUERY);
+    if (xTextServiceInfo && xTextServiceInfo->getImplementationName() == 
"SwXHeadFootText")
+        return false;
 
     uno::Reference<container::XEnumerationAccess> 
xEnumAccess(xText->getText(), uno::UNO_QUERY);
     uno::Reference<container::XEnumeration> xEnum = 
xEnumAccess->createEnumeration();
@@ -3959,7 +3947,7 @@ void 
DomainMapper_Impl::checkIfHeaderFooterIsEmpty(PagePartType ePagePartType, P
     if (!xPageStyle.is())
         return;
 
-    bool bEmpty = isContentEmpty(m_aTextAppendStack.top().xTextAppend, 
GetTextDocument());
+    bool bEmpty = isContentEmpty(m_aTextAppendStack.top().xTextAppend);
 
     if (eType == PageType::FIRST && bEmpty)
     {

Reply via email to