diff options
author | Caolán McNamara <caolanm@redhat.com> | 2011-11-25 20:16:36 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2011-11-25 20:17:18 +0000 |
commit | 9eac8b2d2d5b77e1aa537a8e3756ffbbb10d7e0e (patch) | |
tree | 708b8f0f77f70064b51d63394f1830cf02f0e22c | |
parent | cbb2b42f113e29609161d8bdbeb667a2164a4d1a (diff) |
Resolves: fdo#39950 fix dnd crash from default assignment operators
-rw-r--r-- | reportdesign/inc/RptObject.hxx | 4 | ||||
-rw-r--r-- | reportdesign/source/core/sdr/RptObject.cxx | 58 |
2 files changed, 41 insertions, 21 deletions
diff --git a/reportdesign/inc/RptObject.hxx b/reportdesign/inc/RptObject.hxx index 056a06c4a522..4084a4770e32 100644 --- a/reportdesign/inc/RptObject.hxx +++ b/reportdesign/inc/RptObject.hxx @@ -226,2 +226,4 @@ public: + OOle2Obj& operator=(const OOle2Obj& rObj); + void initializeChart( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel>& _xModel); @@ -277,2 +279,4 @@ public: + OUnoObject& operator=(const OUnoObject& rObj); + private: diff --git a/reportdesign/source/core/sdr/RptObject.cxx b/reportdesign/source/core/sdr/RptObject.cxx index 09bf34044676..b50945a6ea1c 100644 --- a/reportdesign/source/core/sdr/RptObject.cxx +++ b/reportdesign/source/core/sdr/RptObject.cxx @@ -943,14 +943,20 @@ uno::Reference< uno::XInterface > OUnoObject::getUnoShape() } -// ----------------------------------------------------------------------------- + +OUnoObject& OUnoObject::operator=(const OUnoObject& rObj) +{ + if( this == &rObj ) + return *this; + SdrUnoObj::operator=(rObj); + + Reference<XPropertySet> xSource(const_cast<OUnoObject&>(rObj).getUnoShape(), uno::UNO_QUERY); + Reference<XPropertySet> xDest(getUnoShape(), uno::UNO_QUERY); + if ( xSource.is() && xDest.is() ) + comphelper::copyProperties(xSource.get(), xDest.get()); + + return *this; +} + OUnoObject* OUnoObject::Clone() const { - OUnoObject* pClone = CloneHelper< OUnoObject >(); - if ( pClone ) - { - Reference<XPropertySet> xSource(const_cast<OUnoObject*>(this)->getUnoShape(),uno::UNO_QUERY); - Reference<XPropertySet> xDest(pClone->getUnoShape(),uno::UNO_QUERY); - if ( xSource.is() && xDest.is() ) - comphelper::copyProperties(xSource.get(),xDest.get()); - } - return pClone; + return CloneHelper< OUnoObject >(); } @@ -1156,13 +1162,15 @@ uno::Reference< chart2::data::XDatabaseDataProvider > lcl_getDataProvider(const } -// ----------------------------------------------------------------------------- -// Clone() soll eine komplette Kopie des Objektes erzeugen. -OOle2Obj* OOle2Obj::Clone() const + +OOle2Obj& OOle2Obj::operator=(const OOle2Obj& rObj) { - OOle2Obj* pObj = CloneHelper< OOle2Obj >(); - OReportModel* pRptModel = static_cast<OReportModel*>(GetModel()); - svt::EmbeddedObjectRef::TryRunningState( pObj->GetObjRef() ); - pObj->impl_createDataProvider_nothrow(pRptModel->getReportDefinition().get()); + if( this == &rObj ) + return *this; + SdrOle2Obj::operator=(rObj); - uno::Reference< chart2::data::XDatabaseDataProvider > xSource( lcl_getDataProvider(GetObjRef()) ); - uno::Reference< chart2::data::XDatabaseDataProvider > xDest( lcl_getDataProvider(pObj->GetObjRef()) ); + OReportModel* pRptModel = static_cast<OReportModel*>(rObj.GetModel()); + svt::EmbeddedObjectRef::TryRunningState( GetObjRef() ); + impl_createDataProvider_nothrow(pRptModel->getReportDefinition().get()); + + uno::Reference< chart2::data::XDatabaseDataProvider > xSource( lcl_getDataProvider(rObj.GetObjRef()) ); + uno::Reference< chart2::data::XDatabaseDataProvider > xDest( lcl_getDataProvider(GetObjRef()) ); if ( xSource.is() && xDest.is() ) @@ -1170,4 +1178,12 @@ OOle2Obj* OOle2Obj::Clone() const - pObj->initializeChart(pRptModel->getReportDefinition().get()); - return pObj; + initializeChart(pRptModel->getReportDefinition().get()); + + return *this; +} + +// ----------------------------------------------------------------------------- +// Clone() soll eine komplette Kopie des Objektes erzeugen. +OOle2Obj* OOle2Obj::Clone() const +{ + return CloneHelper< OOle2Obj >(); } |