summaryrefslogtreecommitdiff
path: root/writerfilter/source/dmapper/DomainMapper_Impl.cxx
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2024-03-25 10:39:41 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2024-03-25 12:24:17 +0100
commitab29c857c669bcca3d8eea8a5a9e6ad5eae622d7 (patch)
tree9c79ac62b95dd630850bed699786882b60829669 /writerfilter/source/dmapper/DomainMapper_Impl.cxx
parent4a7bd4798f3f79c813e940504463c0af7bf9e985 (diff)
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 <noel.grandin@collabora.co.uk> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'writerfilter/source/dmapper/DomainMapper_Impl.cxx')
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx22
1 files changed, 5 insertions, 17 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index f4943c60c88c..4fdacfb2f944 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -3783,26 +3783,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();
@@ -3949,7 +3937,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)
{