summaryrefslogtreecommitdiff
path: root/oox/source/drawingml/shape.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'oox/source/drawingml/shape.cxx')
-rw-r--r--oox/source/drawingml/shape.cxx22
1 files changed, 18 insertions, 4 deletions
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index 6e8ae072af56..c2e97c5b947b 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -1919,14 +1919,22 @@ void Shape::finalizeXShape( XmlFilterBase& rFilter, const Reference< XShapes >&
rFilter.importFragment( pChartSpaceFragment );
::oox::ppt::PowerPointImport *pPowerPointImport =
dynamic_cast< ::oox::ppt::PowerPointImport* >(&rFilter);
+
+ // The original theme.
+ ThemePtr pTheme;
+
if (!aThemeOverrideFragmentPath.isEmpty() && pPowerPointImport)
{
+ // Handle theme override.
uno::Reference< xml::sax::XFastSAXSerializable > xDoc(
rFilter.importFragment(aThemeOverrideFragmentPath), uno::UNO_QUERY_THROW);
- ThemePtr pTheme = pPowerPointImport->getActualSlidePersist()->getTheme();
- rFilter.importFragment(new ThemeOverrideFragmentHandler(
- rFilter, aThemeOverrideFragmentPath, *pTheme), xDoc);
- pPowerPointImport->getActualSlidePersist()->setTheme(pTheme);
+ pTheme = pPowerPointImport->getActualSlidePersist()->getTheme();
+ auto pThemeOverride = std::make_shared<Theme>(*pTheme);
+ rFilter.importFragment(
+ new ThemeOverrideFragmentHandler(rFilter, aThemeOverrideFragmentPath,
+ *pThemeOverride),
+ xDoc);
+ pPowerPointImport->getActualSlidePersist()->setTheme(pThemeOverride);
}
// convert imported chart model to chart document
@@ -1950,6 +1958,12 @@ void Shape::finalizeXShape( XmlFilterBase& rFilter, const Reference< XShapes >&
}
}
+
+ if (!aThemeOverrideFragmentPath.isEmpty() && pPowerPointImport)
+ {
+ // Restore the original theme.
+ pPowerPointImport->getActualSlidePersist()->setTheme(pTheme);
+ }
}
catch( Exception& )
{