diff options
author | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-09-17 09:53:50 +0200 |
---|---|---|
committer | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-09-17 09:59:49 +0200 |
commit | 3f1749f4958d3c167e6134703e0f5e41e6bde0d6 (patch) | |
tree | 10779fa4655622f9aeab63aca71fa881fce75dca | |
parent | 25fb9471552c3b17eb7e9ae622b3ac89e7e997d0 (diff) |
bnc#584721: Do not add extra title and outliner blocks to master slide
There are master slides / layouts imported from PPTX in which
there is no title or body layout block, but so far Impress
added these by default to the master slides if they were
missing.
Now they are skipped by the importer code.
Change-Id: I256a4e78639ea39d0f87a94e6676422c7dbcde4a
-rw-r--r-- | oox/source/ppt/presentationfragmenthandler.cxx | 11 | ||||
-rw-r--r-- | sd/qa/unit/data/pptx/bnc584721_1_2.pptx (renamed from sd/qa/unit/data/pptx/bnc584721_1.pptx) | bin | 15008 -> 15008 bytes | |||
-rw-r--r-- | sd/qa/unit/import-tests.cxx | 19 |
3 files changed, 29 insertions, 1 deletions
diff --git a/oox/source/ppt/presentationfragmenthandler.cxx b/oox/source/ppt/presentationfragmenthandler.cxx index bef84de51bd6..811550ea561f 100644 --- a/oox/source/ppt/presentationfragmenthandler.cxx +++ b/oox/source/ppt/presentationfragmenthandler.cxx @@ -465,9 +465,20 @@ bool PresentationFragmentHandler::importSlide( const FragmentHandlerRef& rxSlide SlidePersistPtr pMasterPersistPtr( pSlidePersistPtr->getMasterPersist() ); if ( pMasterPersistPtr.get() ) { + // Setting "Layout" property adds extra title and outliner preset shapes to the master slide + Reference< drawing::XDrawPage > xMasterSlide(pMasterPersistPtr->getPage()); + const int nCount = xMasterSlide->getCount(); + const OUString sLayout = "Layout"; uno::Reference< beans::XPropertySet > xSet( xSlide, uno::UNO_QUERY_THROW ); xSet->setPropertyValue( sLayout, Any( pMasterPersistPtr->getLayoutFromValueToken() ) ); + + while( nCount < xMasterSlide->getCount()) + { + Reference< drawing::XShape > xShape; + xMasterSlide->getByIndex(xMasterSlide->getCount()-1) >>= xShape; + xMasterSlide->remove(xShape); + } } while( xSlide->getCount() ) { diff --git a/sd/qa/unit/data/pptx/bnc584721_1.pptx b/sd/qa/unit/data/pptx/bnc584721_1_2.pptx Binary files differindex dbbcabddcbbb..dbbcabddcbbb 100644 --- a/sd/qa/unit/data/pptx/bnc584721_1.pptx +++ b/sd/qa/unit/data/pptx/bnc584721_1_2.pptx diff --git a/sd/qa/unit/import-tests.cxx b/sd/qa/unit/import-tests.cxx index 3036a58ad9b3..3f8d1447deda 100644 --- a/sd/qa/unit/import-tests.cxx +++ b/sd/qa/unit/import-tests.cxx @@ -79,6 +79,7 @@ public: void testBnc480256(); void testCreationDate(); void testBnc584721_1(); + void testBnc584721_2(); CPPUNIT_TEST_SUITE(SdFiltersTest); CPPUNIT_TEST(testDocumentLayout); @@ -102,6 +103,7 @@ public: CPPUNIT_TEST(testBnc480256); CPPUNIT_TEST(testCreationDate); CPPUNIT_TEST(testBnc584721_1); + CPPUNIT_TEST(testBnc584721_2); CPPUNIT_TEST_SUITE_END(); }; @@ -715,7 +717,7 @@ void SdFiltersTest::testBnc584721_1() { // Title text shape on the master page contained wrong text. - ::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/pptx/bnc584721_1.pptx"), PPTX); + ::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/pptx/bnc584721_1_2.pptx"), PPTX); SdDrawDocument *pDoc = xDocShRef->GetDoc(); CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL ); @@ -729,6 +731,21 @@ void SdFiltersTest::testBnc584721_1() xDocShRef->DoClose(); } +void SdFiltersTest::testBnc584721_2() +{ + // Import created an extra/unneeded outliner shape on the master slide next to the imported title shape. + + ::sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/pptx/bnc584721_1_2.pptx"), PPTX); + + SdDrawDocument *pDoc = xDocShRef->GetDoc(); + CPPUNIT_ASSERT_MESSAGE( "no document", pDoc != NULL ); + const SdrPage *pPage = &(pDoc->GetPage(1)->TRG_GetMasterPage()); + CPPUNIT_ASSERT_MESSAGE( "no page", pPage != NULL ); + CPPUNIT_ASSERT_EQUAL(size_t(1), pPage->GetObjCount()); + + xDocShRef->DoClose(); +} + CPPUNIT_TEST_SUITE_REGISTRATION(SdFiltersTest); CPPUNIT_PLUGIN_IMPLEMENT(); |