diff options
-rw-r--r-- | writerfilter/source/ooxml/OOXMLDocumentImpl.cxx | 25 |
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() |