summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2019-10-14 00:12:23 +0300
committerMichael Stahl <michael.stahl@cib.de>2019-10-14 13:10:23 +0200
commit5dfaf7a608a1827d1b56ac7a7d4651f26e4754d1 (patch)
treed626efeeeb663858371c5805c75f8e43dc4cb834 /oox
parentf77820ba5eab155b630b93a587de39c6d35e0052 (diff)
tdf#127164: Disable Undo during pptx save
Change-Id: I07fe6895cc2ba43dfa1716e67bdbb4e697e3420c Reviewed-on: https://gerrit.libreoffice.org/80727 Tested-by: Jenkins Reviewed-by: Jim Raykowski <raykowj@gmail.com> (cherry picked from commit 03ec3b7dd11656c8b64a94efb172e17d97ea662e) Reviewed-on: https://gerrit.libreoffice.org/80756 Tested-by: Xisco Faulí <xiscofauli@libreoffice.org> Reviewed-by: Michael Stahl <michael.stahl@cib.de>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/ppt/pptimport.cxx28
1 files changed, 20 insertions, 8 deletions
diff --git a/oox/source/ppt/pptimport.cxx b/oox/source/ppt/pptimport.cxx
index d65e408d3c13..9476eca2d825 100644
--- a/oox/source/ppt/pptimport.cxx
+++ b/oox/source/ppt/pptimport.cxx
@@ -25,6 +25,7 @@
#include <com/sun/star/document/XUndoManager.hpp>
#include <com/sun/star/document/XUndoManagerSupplier.hpp>
#include <comphelper/propertysequence.hxx>
+#include <comphelper/scopeguard.hxx>
#include <osl/diagnose.h>
#include <vcl/svapp.hxx>
#include <vcl/weld.hxx>
@@ -232,17 +233,28 @@ sal_Bool SAL_CALL PowerPointImport::filter( const Sequence< PropertyValue >& rDe
Reference<css::lang::XMultiServiceFactory> aFactory(getComponentContext()->getServiceManager(), UNO_QUERY_THROW);
Reference< XExporter > xExporter(aFactory->createInstanceWithArguments("com.sun.star.comp.Impress.oox.PowerPointExport", aArguments), UNO_QUERY);
- if (xExporter.is())
+ if (Reference<XFilter> xFilter{ xExporter, UNO_QUERY })
{
- Reference< XComponent > xDocument( getModel(), UNO_QUERY );
- Reference< XFilter > xFilter( xExporter, UNO_QUERY );
-
- if (xFilter.is())
+ Reference<util::XLockable> xUndoManager;
+ bool bWasUnLocked = true;
+ if (Reference<document::XUndoManagerSupplier> xUMS{ getModel(), UNO_QUERY })
{
- xExporter->setSourceDocument( xDocument );
- if( xFilter->filter( rDescriptor ) )
- return true;
+ xUndoManager = xUMS->getUndoManager();
+ if (xUndoManager.is())
+ {
+ bWasUnLocked = !xUndoManager->isLocked();
+ xUndoManager->lock();
+ }
}
+ comphelper::ScopeGuard aGuard([xUndoManager, bWasUnLocked] {
+ if (xUndoManager && bWasUnLocked)
+ xUndoManager->unlock();
+ });
+
+ Reference< XComponent > xDocument(getModel(), UNO_QUERY);
+ xExporter->setSourceDocument(xDocument);
+ if (xFilter->filter(rDescriptor))
+ return true;
}
}