fdo#80555: Set position of GraphicObjectShape objects correctly

Added a unit test for this issue.

(cherry picked from commit 816542b2bdd23423625ad4c2f0e706d5558b8ba9)
(cherry picked from commit c38be106ff1c1ff5e1b279e4ea2c710b524d23f1)

Conflicts:

	sw/qa/extras/ooxmlimport/ooxmlimport.cxx

Change-Id: I13656f82c97e5bb8458cdc1cb47ddcc5f6d60330
Reviewed-on: https://gerrit.libreoffice.org/10056
Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Tested-by: Miklos Vajna <vmiklos@collabora.co.uk>
diff --git a/sw/qa/extras/ooxmlimport/data/fdo80555.docx b/sw/qa/extras/ooxmlimport/data/fdo80555.docx
new file mode 100644
index 0000000..a15bdc1
--- /dev/null
+++ b/sw/qa/extras/ooxmlimport/data/fdo80555.docx
Binary files differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index f8f951f..f2051fa 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -2173,6 +2173,14 @@ DECLARE_OOXMLIMPORT_TEST(testFootnote, "footnote.docx")
    CPPUNIT_ASSERT(aFootnote.endsWith("bar"));
}

DECLARE_OOXMLIMPORT_TEST(testFdo80555, "fdo80555.docx")
{
    uno::Reference<drawing::XShape> xShape = getShape(1);
    // Shape was wrongly placed at X=0, Y=0
    CPPUNIT_ASSERT_EQUAL(sal_Int32(3318), xShape->getPosition().X);
    CPPUNIT_ASSERT_EQUAL(sal_Int32(245), xShape->getPosition().Y);
}

#endif

CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
index 11f5a73..6cd88a5 100644
--- a/writerfilter/source/dmapper/GraphicImport.cxx
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -777,9 +777,11 @@ void GraphicImport::lcl_attribute(Id nName, Value& rValue)
                        m_pImpl->applyPosition(xShapeProps);

                        uno::Reference<lang::XServiceInfo> xServiceInfo(m_xShape, uno::UNO_QUERY_THROW);
                        if (xServiceInfo->supportsService("com.sun.star.drawing.GroupShape"))
                        if (xServiceInfo->supportsService("com.sun.star.drawing.GroupShape") ||
                                xServiceInfo->supportsService("com.sun.star.drawing.GraphicObjectShape"))
                        {
                            // Position of the groupshape should be set after children have been added.
                            // fdo#80555: also set position for graphic shapes here
                            m_xShape->setPosition(awt::Point(m_pImpl->nLeftPosition, m_pImpl->nTopPosition));
                        }
                        m_pImpl->applyRelativePosition(xShapeProps);