From 02d03eb4ad6e64744659c5fe04282b25b66c28d8 Mon Sep 17 00:00:00 2001 From: David Tardon Date: Thu, 16 May 2013 15:27:08 +0200 Subject: fdo#64279 do not crash opening report for editing There are two problems: 1) The classes derived from SdrObject cache their SvxShape, but do not implement impl_setUnoShape(). 2) There is a lifetime issue in association of a SdrObject and its SvxShape. SvxDrawPage::CreateSdrObject not only creates a new SdrObject for a shape, but also inserts it into the page. At this point, the shape has not been attached to the object yet. That means that the object creates another shape at one point during the InsertObject call, which is then destroyed again. But reportdesign shapes own their objects, which means that destuction of the shape causes destruction of the object too... My first idea was to disable the insertion in SvxDrawPage::CreateSdrObject, but it has been there since the dawn of time, so I did not gather the courage to do that. Instead, I put in a hack to allow to skip the insertion. Change-Id: I888a54067be1934578434d8b476a13a7ff8d02b3 --- include/svx/svdobj.hxx | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'include/svx') diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx index d3047b897e2f..081fe76cae19 100644 --- a/include/svx/svdobj.hxx +++ b/include/svx/svdobj.hxx @@ -1055,6 +1055,11 @@ public: Rectangle GetBLIPSizeRectangle() const; void SetBLIPSizeRectangle( const Rectangle& aRect ); + /// @see mbDoNotInsertIntoPageAutomatically + void SetDoNotInsertIntoPageAutomatically(bool bSet); + /// @see mbDoNotInsertIntoPageAutomatically + bool IsDoNotInsertIntoPageAutomatically() const; + protected: /** Sets a new UNO shape * @@ -1082,6 +1087,11 @@ private: SvxShape* mpSvxShape; ::com::sun::star::uno::WeakReference< ::com::sun::star::uno::XInterface > maWeakUnoShape; + /** HACK: Do not automatically insert newly created object into a page. + * + * The user needs to do it manually later. + */ + bool mbDoNotInsertIntoPageAutomatically; }; //************************************************************ -- cgit