summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-12-19 19:41:52 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2014-12-19 22:54:28 +0100
commit97952280f0adbe195e6a2e0bab8a21a7e352a721 (patch)
treee97bee8c8d7248da3bce5ba48b2bd274fbd99c15
parentcdb8d7a53e587819044f2b5ea43c6416909686b1 (diff)
fdo#86963 SwXShape: don't ask SwTextBoxHelper for ZOrder of child shapes
Regression from commit 01fc08c0b5c57fef8ad3755672f4266d85e849a5 (fdo#85554 SwXShape: fix getting ZOrder property when doc contains TextBoxes, 2014-11-20), the problem was that we returned wrong ZOrder of shapes inside group shapes. In SwXShape::getPropertyValue(), pObj points to the Writer-interfacing outermost group shape in case of shapes contained by group shapes, while GetSvxShape() gives access to the real shape. Given that TextBoxes are only possible at the highest level (and not inside group shapes), just check if the two pointers are the same: when not, then no need to convert anything. With this, child shapes get back their original ZOrder -- before in case the group shape had ZOrder=0, all its child shapes had ZOrder=0 as well. Change-Id: I9c4097154130cd04f6ab2f2082abafc1d4333872
-rw-r--r--sw/qa/extras/odfexport/data/fdo86963.odtbin0 -> 39845 bytes
-rw-r--r--sw/qa/extras/odfexport/odfexport.cxx8
-rw-r--r--sw/source/core/unocore/unodraw.cxx13
3 files changed, 19 insertions, 2 deletions
diff --git a/sw/qa/extras/odfexport/data/fdo86963.odt b/sw/qa/extras/odfexport/data/fdo86963.odt
new file mode 100644
index 000000000000..72896e13995b
--- /dev/null
+++ b/sw/qa/extras/odfexport/data/fdo86963.odt
Binary files differ
diff --git a/sw/qa/extras/odfexport/odfexport.cxx b/sw/qa/extras/odfexport/odfexport.cxx
index 9c2200c026e4..41c4ed9d4e0e 100644
--- a/sw/qa/extras/odfexport/odfexport.cxx
+++ b/sw/qa/extras/odfexport/odfexport.cxx
@@ -402,6 +402,14 @@ DECLARE_ODFEXPORT_TEST(testTextboxRoundedCorners, "textbox-rounded-corners.odt")
CPPUNIT_ASSERT_EQUAL(OUString("a"), xCell->getString());
}
+DECLARE_ODFEXPORT_TEST(testFdo86963, "fdo86963.odt")
+{
+ // Export of this document failed with beans::UnknownPropertyException.
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<drawing::XDrawPage> xDrawPage = xDrawPageSupplier->getDrawPage();
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xDrawPage->getCount());
+}
+
#endif
CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/core/unocore/unodraw.cxx b/sw/source/core/unocore/unodraw.cxx
index ea0dd24ba90e..3cc240edf1e3 100644
--- a/sw/source/core/unocore/unodraw.cxx
+++ b/sw/source/core/unocore/unodraw.cxx
@@ -1763,8 +1763,17 @@ uno::Any SwXShape::getPropertyValue(const OUString& rPropertyName)
const SdrObject* pObj = pFmt->FindRealSdrObject();
if (pObj)
{
- std::set<const SwFrmFmt*> aTextBoxes = SwTextBoxHelper::findTextBoxes(pFmt->GetDoc());
- aRet <<= SwTextBoxHelper::getOrdNum(pObj, aTextBoxes);
+ bool bConvert = true;
+ if (SvxShape* pSvxShape = GetSvxShape())
+ // In case of group shapes, pSvxShape points to the child shape, while pObj points to the outermost group shape.
+ if (pSvxShape->GetSdrObject() != pObj)
+ // Textboxes are not expected inside group shapes, so no conversion is necessary there.
+ bConvert = false;
+ if (bConvert)
+ {
+ std::set<const SwFrmFmt*> aTextBoxes = SwTextBoxHelper::findTextBoxes(pFmt->GetDoc());
+ aRet <<= SwTextBoxHelper::getOrdNum(pObj, aTextBoxes);
+ }
}
}
}