summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.cxx25
1 files changed, 22 insertions, 3 deletions
diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
index 44552eee5e5f..b905d8968a15 100644
--- a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
+++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
@@ -417,8 +417,30 @@ void OOXMLDocumentImpl::resolveFooter(Stream & rStream,
}
}
+namespace {
+// Ensures that the indicator is reset after exiting OOXMLDocumentImpl::resolve
+class StatusIndicatorGuard{
+public:
+ explicit StatusIndicatorGuard(css::uno::Reference<css::task::XStatusIndicator>& xStatusIndicator)
+ :mxStatusIndicator(xStatusIndicator)
+ {
+ }
+
+ ~StatusIndicatorGuard()
+ {
+ if (mxStatusIndicator.is())
+ mxStatusIndicator->end();
+ }
+
+private:
+ css::uno::Reference<css::task::XStatusIndicator> mxStatusIndicator;
+};
+}
+
void OOXMLDocumentImpl::resolve(Stream & rStream)
{
+ StatusIndicatorGuard aStatusIndicatorGuard(mxStatusIndicator);
+
if (utl::MediaDescriptor(maMediaDescriptor).getUnpackedValueOrDefault("ReadGlossaries", false))
{
resolveFastSubStream(rStream, OOXMLStream::GLOSSARY);
@@ -515,9 +537,6 @@ void OOXMLDocumentImpl::resolve(Stream & rStream)
"OOXMLDocumentImpl::resolve(): non-UNO exception");
}
}
-
- if (mxStatusIndicator.is())
- mxStatusIndicator->end();
}
void OOXMLDocumentImpl::incrementProgress()