[Libreoffice-commits] core.git: sd/qa sd/source
Attila Bakos (NISZ) (via logerrit)
logerrit at kemper.freedesktop.org
Thu Apr 29 08:49:15 UTC 2021
sd/qa/unit/data/pptx/LostPlaceholder.odp |binary
sd/qa/unit/export-tests-ooxml1.cxx | 35 ++++++++++++++++++++++++++++++-
sd/source/filter/eppt/pptx-epptooxml.cxx | 17 +++++++++++----
3 files changed, 47 insertions(+), 5 deletions(-)
New commits:
commit b6b02e0b4c9d739836e1f61a886ea45b01e6696e
Author: Attila Bakos (NISZ) <bakos.attilakaroly at nisz.hu>
AuthorDate: Tue Apr 20 13:02:44 2021 +0200
Commit: László Németh <nemeth at numbertext.org>
CommitDate: Thu Apr 29 10:48:27 2021 +0200
tdf#111903 tdf#137152 PPTX export: fix placeholders
Empty placeholders were exported as white empty
custom shapes, losing their visibility and usability.
Note: export of properties hasn't been implemented, yet.
Change-Id: Ie8bd6a611f5fb43bcaa55f6b2f5b07daf731b163
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114331
Tested-by: László Németh <nemeth at numbertext.org>
Reviewed-by: László Németh <nemeth at numbertext.org>
diff --git a/sd/qa/unit/data/pptx/LostPlaceholder.odp b/sd/qa/unit/data/pptx/LostPlaceholder.odp
new file mode 100644
index 000000000000..80ead189f260
Binary files /dev/null and b/sd/qa/unit/data/pptx/LostPlaceholder.odp differ
diff --git a/sd/qa/unit/export-tests-ooxml1.cxx b/sd/qa/unit/export-tests-ooxml1.cxx
index fded47a1c2c9..0be65e22ee13 100644
--- a/sd/qa/unit/export-tests-ooxml1.cxx
+++ b/sd/qa/unit/export-tests-ooxml1.cxx
@@ -69,6 +69,7 @@ public:
void testN828390_4();
void testN828390_5();
void testFdo71961();
+ void testLostPlaceholders();
void testN828390();
void testBnc880763();
void testBnc862510_5();
@@ -122,6 +123,7 @@ public:
CPPUNIT_TEST(testN828390_4);
CPPUNIT_TEST(testN828390_5);
CPPUNIT_TEST(testFdo71961);
+ CPPUNIT_TEST(testLostPlaceholders);
CPPUNIT_TEST(testN828390);
CPPUNIT_TEST(testBnc880763);
CPPUNIT_TEST(testBnc862510_5);
@@ -370,6 +372,37 @@ void SdOOXMLExportTest1::testN828390_5()
xDocShRef->DoClose();
}
+void SdOOXMLExportTest1::testLostPlaceholders()
+{
+ ::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/LostPlaceholder.odp"), ODP);
+ CPPUNIT_ASSERT(xDocShRef.is());
+
+ xDocShRef = saveAndReload( xDocShRef.get(), PPTX );
+ CPPUNIT_ASSERT(xDocShRef.is());
+
+ auto pDoc = xDocShRef->GetDoc();
+ CPPUNIT_ASSERT(pDoc);
+ auto pPage = pDoc->GetPage(1);
+ CPPUNIT_ASSERT(pPage);
+ auto pObj = pPage->GetObj(1);
+ CPPUNIT_ASSERT(pObj);
+ uno::Reference<drawing::XShape> xShp (pObj->getUnoShape(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xShp);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Wrong ShapeType!", OUString(u"com.sun.star.presentation.OutlinerShape"), xShp->getShapeType());
+ uno::Reference<beans::XPropertySet> xShpProps(xShp, uno::UNO_QUERY);
+ // Without the fix in place there will be the following error:
+ // Expected: com.sun.star.presentation.OutlinerShape
+ // Actual: com.sun.star.drawing.CustomShape
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("It must be a placeholder!", true, xShpProps->getPropertyValue("IsPresentationObject").get<bool>());
+ // Without the fix in place this will the following:
+ // Expected: true
+ // Actual: false
+
+ xDocShRef->DoClose();
+}
+
void SdOOXMLExportTest1::testFdo71961()
{
::sd::DrawDocShellRef xDocShRef = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/fdo71961.odp"), ODP);
@@ -379,7 +412,7 @@ void SdOOXMLExportTest1::testFdo71961()
// Export to .pptx changes all text frames to custom shape objects, which obey TextWordWrap property
// (which is false for text frames otherwise and is ignored). Check that frames that should wrap still do.
- SdrObjCustomShape *pTxtObj = dynamic_cast<SdrObjCustomShape *>( pPage->GetObj( 1 ));
+ auto pTxtObj = pPage->GetObj( 1 );
CPPUNIT_ASSERT_MESSAGE( "no text object", pTxtObj != nullptr);
CPPUNIT_ASSERT_EQUAL( OUString( "Text to be always wrapped" ), pTxtObj->GetOutlinerParaObject()->GetTextObject().GetText(0));
CPPUNIT_ASSERT_EQUAL( true, pTxtObj->GetMergedItem(SDRATTR_TEXT_WORDWRAP).GetValue());
diff --git a/sd/source/filter/eppt/pptx-epptooxml.cxx b/sd/source/filter/eppt/pptx-epptooxml.cxx
index d87f51a07712..fa1a55ac6b5f 100644
--- a/sd/source/filter/eppt/pptx-epptooxml.cxx
+++ b/sd/source/filter/eppt/pptx-epptooxml.cxx
@@ -1439,13 +1439,22 @@ ShapeExport& PowerPointShapeExport::WritePageShape(const Reference< XShape >& xS
bool PowerPointShapeExport::WritePlaceholder(const Reference< XShape >& xShape, PlaceholderType ePlaceholder, bool bMaster)
{
SAL_INFO("sd.eppt", "WritePlaceholder " << bMaster << " " << ShapeExport::NonEmptyText(xShape));
- if (bMaster && ShapeExport::NonEmptyText(xShape))
+ if (!xShape)
+ return false;
+ try
{
- WritePlaceholderShape(xShape, ePlaceholder);
+ Reference<XPropertySet> xShapeProps(xShape, UNO_QUERY);
+ if (xShapeProps->getPropertyValue("IsPresentationObject").get<bool>())
+ {
+ WritePlaceholderShape(xShape, ePlaceholder);
- return true;
+ return true;
+ }
+ }
+ catch (Exception&)
+ {
+ return false;
}
-
return false;
}
More information about the Libreoffice-commits
mailing list