[Libreoffice-commits] core.git: Branch 'libreoffice-6-2' - oox/source sw/qa

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Fri May 17 11:26:42 UTC 2019


 oox/source/drawingml/shape.cxx               |    5 ++++-
 oox/source/shape/WpgContext.cxx              |    6 +++++-
 sw/qa/extras/ooxmlimport/data/tdf124398.docx |binary
 sw/qa/extras/ooxmlimport/ooxmlimport2.cxx    |   12 ++++++++++++
 4 files changed, 21 insertions(+), 2 deletions(-)

New commits:
commit 9baed128acbbac24ef85a8470d721e8ee59b776f
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Mon Apr 29 08:35:29 2019 +0200
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Fri May 17 13:25:59 2019 +0200

    tdf#124398 DOCX drawingML import: handle charts in group shapes
    
    Regression from commit 8c73b16f5f18f3bc1dbf9ff6c1475db56b44d304 (DOCX
    import: declare wpg as a supported feature, 2013-12-05), the problem was
    that <wpg:graphicFrame> did not forward to to the relevant oox context,
    and also Writer had no idea how to create a
    com.sun.star.drawing.OLE2Shape. Fix the later by using the same service
    name that's in use for the non-groupshape case.
    
    (cherry picked from commit fdf4aaa3dc5cc1d2e7a112e6c32d7845f13caef8)
    
    Change-Id: Id3536854da7c1f01525bb38d801496ecebd4c161
    Reviewed-on: https://gerrit.libreoffice.org/71524
    Tested-by: Xisco Faulí <xiscofauli at libreoffice.org>
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index ba3e8d7fdb5d..d45a88a692cf 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -218,7 +218,10 @@ ChartShapeInfo& Shape::setChartType( bool bEmbedShapes )
 {
     OSL_ENSURE( meFrameType == FRAMETYPE_GENERIC, "Shape::setChartType - multiple frame types" );
     meFrameType = FRAMETYPE_CHART;
-    msServiceName = "com.sun.star.drawing.OLE2Shape";
+    if (mbWps)
+        msServiceName = "com.sun.star.drawing.temporaryForXMLImportOLE2Shape";
+    else
+        msServiceName = "com.sun.star.drawing.OLE2Shape";
     mxChartShapeInfo.reset( new ChartShapeInfo( bEmbedShapes ) );
     return *mxChartShapeInfo;
 }
diff --git a/oox/source/shape/WpgContext.cxx b/oox/source/shape/WpgContext.cxx
index 95264e53ce15..75ff0422bcf2 100644
--- a/oox/source/shape/WpgContext.cxx
+++ b/oox/source/shape/WpgContext.cxx
@@ -57,7 +57,11 @@ oox::core::ContextHandlerRef WpgContext::onCreateContext(sal_Int32 nElementToken
         return new oox::drawingml::ShapeGroupContext(*this, mpShape, std::make_shared<oox::drawingml::Shape>("com.sun.star.drawing.GroupShape"));
     }
     case XML_graphicFrame:
-        break;
+    {
+        auto pShape = std::make_shared<oox::drawingml::Shape>("com.sun.star.drawing.GraphicObjectShape");
+        pShape->setWps(true);
+        return new oox::drawingml::GraphicalObjectFrameContext(*this, mpShape, pShape, /*bEmbedShapesInChart=*/true);
+    }
     default:
         SAL_WARN("oox", "WpgContext::createFastChildContext: unhandled element: " << getBaseToken(nElementToken));
         break;
diff --git a/sw/qa/extras/ooxmlimport/data/tdf124398.docx b/sw/qa/extras/ooxmlimport/data/tdf124398.docx
new file mode 100644
index 000000000000..4d1855347fd6
Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/tdf124398.docx differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
index 57c7f7ef4245..e5c6e182a02e 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx
@@ -235,6 +235,18 @@ DECLARE_OOXMLIMPORT_TEST(testTdf112443, "tdf112443.docx")
 // and as result only one page should be generated.
 DECLARE_OOXMLIMPORT_TEST(testTdf113182, "tdf113182.docx") { CPPUNIT_ASSERT_EQUAL(1, getPages()); }
 
+DECLARE_OOXMLIMPORT_TEST(testTdf124398, "tdf124398.docx")
+{
+    uno::Reference<container::XIndexAccess> xGroup(getShape(1), uno::UNO_QUERY);
+    CPPUNIT_ASSERT(xGroup.is());
+    // Without the accompanying fix in place, this test would have failed with 'Expected: 2; Actual:
+    // 1', i.e. the chart children of the group shape was lost.
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), xGroup->getCount());
+
+    uno::Reference<drawing::XShapeDescriptor> xShape(xGroup->getByIndex(1), uno::UNO_QUERY);
+    CPPUNIT_ASSERT_EQUAL(OUString("com.sun.star.drawing.OLE2Shape"), xShape->getShapeType());
+}
+
 DECLARE_OOXMLIMPORT_TEST(testTdf113946, "tdf113946.docx")
 {
     OUString aTop = parseDump("/root/page/body/txt/anchored/SwAnchoredDrawObject/bounds", "top");


More information about the Libreoffice-commits mailing list