sd/qa/unit/export-tests.cxx        |   16 +++++++++++++
 xmloff/source/draw/shapeexport.cxx |   45 +++++++++++++++++++++++++++++++++++++
 2 files changed, 61 insertions(+)

New commits:
commit 47c465cb049ad8055dbd13a793afa958194185c6
Author:     Tünde Tóth <toth.tu...@nisz.hu>
AuthorDate: Fri Jan 27 09:55:40 2023 +0100
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Thu Feb 23 10:06:50 2023 +0000

    tdf#153179 ODP export regression: fix lost shape at missing object
    
    If the object is missing, it's still possible to keep its shape
    by exporting its preview graphic, as before the regression.
    
    Regression from commit adc042f95d3dbd65b778260025d59283146916e5
    "tdf#124333 PPTX import: fix Z-order of embedded OLE objects".
    
    See also commit 907da02bf8b33c080538731864225b3c44251328
    "tdf#152436 PPTX export regression: fix lost shape at missing object"
    
    Change-Id: I614730435a857c6cdf01d4cdfc525fc452dffa29
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146247
    Tested-by: Jenkins
    Tested-by: László Németh <nem...@numbertext.org>
    Reviewed-by: László Németh <nem...@numbertext.org>
    (cherry picked from commit da725dfe07f2cf10349772d1667591c4d6a6fe8a)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146990
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/146991

diff --git a/sd/qa/unit/export-tests.cxx b/sd/qa/unit/export-tests.cxx
index 2e1a3ad5ec30..7b0a1032b3d1 100644
--- a/sd/qa/unit/export-tests.cxx
+++ b/sd/qa/unit/export-tests.cxx
@@ -95,6 +95,7 @@ public:
     void testMasterPageBackgroundFullSize();
     void testColumnsODG();
     void testTdf112126();
+    void testTdf153179();
 
     CPPUNIT_TEST_SUITE(SdExportTest);
 
@@ -143,6 +144,7 @@ public:
     CPPUNIT_TEST(testMasterPageBackgroundFullSize);
     CPPUNIT_TEST(testColumnsODG);
     CPPUNIT_TEST(testTdf112126);
+    CPPUNIT_TEST(testTdf153179);
     CPPUNIT_TEST_SUITE_END();
 
     virtual void registerNamespaces(xmlXPathContextPtr& pXmlXPathCtx) override
@@ -1735,6 +1737,20 @@ void SdExportTest::testTdf112126()
     xDocShRef->DoClose();
 }
 
+void SdExportTest::testTdf153179()
+{
+    ::sd::DrawDocShellRef xDocShRef
+        = 
loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/ole-emf_min.pptx"), 
PPTX);
+
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("number of shapes is incorrect", sal_Int32(1),
+                                 getPage(0, xDocShRef)->getCount());
+
+    xDocShRef = saveAndReload(xDocShRef.get(), ODP);
+
+    // Check number of shapes after export.
+    CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getPage(0, xDocShRef)->getCount());
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(SdExportTest);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/xmloff/source/draw/shapeexport.cxx 
b/xmloff/source/draw/shapeexport.cxx
index 43f21168a871..683e2e8f1dfd 100644
--- a/xmloff/source/draw/shapeexport.cxx
+++ b/xmloff/source/draw/shapeexport.cxx
@@ -3009,6 +3009,51 @@ void XMLShapeExport::ImpExportOLE2Shape(
                     mrExport.AddAttribute( XML_NAMESPACE_XLINK, XML_SHOW, 
XML_EMBED );
                     mrExport.AddAttribute( XML_NAMESPACE_XLINK, XML_ACTUATE, 
XML_ONLOAD );
                 }
+                else
+                {
+                    // tdf#153179 Export the preview graphic of the object if 
the object is missing.
+                    uno::Reference<graphic::XGraphic> xGraphic;
+                    xPropSet->getPropertyValue("Graphic") >>= xGraphic;
+
+                    if (xGraphic.is())
+                    {
+                        OUString aMimeType;
+                        const OUString aHref = 
mrExport.AddEmbeddedXGraphic(xGraphic, aMimeType);
+
+                        if (aMimeType.isEmpty())
+                            mrExport.GetGraphicMimeTypeFromStream(xGraphic, 
aMimeType);
+
+                        if (!aHref.isEmpty())
+                        {
+                            mrExport.AddAttribute(XML_NAMESPACE_XLINK, 
XML_HREF, aHref);
+                            mrExport.AddAttribute(XML_NAMESPACE_XLINK, 
XML_TYPE, XML_SIMPLE);
+                            mrExport.AddAttribute(XML_NAMESPACE_XLINK, 
XML_SHOW, XML_EMBED);
+                            mrExport.AddAttribute(XML_NAMESPACE_XLINK, 
XML_ACTUATE, XML_ONLOAD);
+                        }
+
+                        if (!aMimeType.isEmpty()
+                            && GetExport().getSaneDefaultVersion() > 
SvtSaveOptions::ODFSVER_012)
+                        { // ODF 1.3 OFFICE-3943
+                            mrExport.AddAttribute(SvtSaveOptions::ODFSVER_013
+                                                          <= 
GetExport().getSaneDefaultVersion()
+                                                      ? XML_NAMESPACE_DRAW
+                                                      : XML_NAMESPACE_LO_EXT,
+                                                  "mime-type", aMimeType);
+                        }
+
+                        SvXMLElementExport aImageElem(mrExport, 
XML_NAMESPACE_DRAW, XML_IMAGE, true,
+                                                      true);
+
+                        // optional office:binary-data
+                        mrExport.AddEmbeddedXGraphicAsBase64(xGraphic);
+
+                        ImpExportEvents(xShape);
+                        ImpExportGluePoints(xShape);
+                        ImpExportDescription(xShape);
+
+                        return;
+                    }
+                }
             }
         }
 

Reply via email to