summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2011-11-25 20:16:36 +0000
committerCaolán McNamara <caolanm@redhat.com>2011-11-25 20:17:18 +0000
commit9eac8b2d2d5b77e1aa537a8e3756ffbbb10d7e0e (patch)
tree708b8f0f77f70064b51d63394f1830cf02f0e22c
parentcbb2b42f113e29609161d8bdbeb667a2164a4d1a (diff)
Resolves: fdo#39950 fix dnd crash from default assignment operators
-rw-r--r--reportdesign/inc/RptObject.hxx4
-rw-r--r--reportdesign/source/core/sdr/RptObject.cxx58
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
@@ -224,6 +224,8 @@ public:
224 virtual OOle2Obj* Clone() const; 224 virtual OOle2Obj* Clone() const;
225 virtual void initializeOle(); 225 virtual void initializeOle();
226 226
227 OOle2Obj& operator=(const OOle2Obj& rObj);
228
227 void initializeChart( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel>& _xModel); 229 void initializeChart( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel>& _xModel);
228}; 230};
229 231
@@ -275,6 +277,8 @@ public:
275 virtual sal_uInt32 GetObjInventor() const; 277 virtual sal_uInt32 GetObjInventor() const;
276 virtual OUnoObject* Clone() const; 278 virtual OUnoObject* Clone() const;
277 279
280 OUnoObject& operator=(const OUnoObject& rObj);
281
278private: 282private:
279 void impl_setReportComponent_nothrow(); 283 void impl_setReportComponent_nothrow();
280 void impl_initializeModel_nothrow(); 284 void impl_initializeModel_nothrow();
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
@@ -941,18 +941,24 @@ uno::Reference< uno::XInterface > OUnoObject::getUnoShape()
941{ 941{
942 return OObjectBase::getUnoShapeOf( *this ); 942 return OObjectBase::getUnoShapeOf( *this );
943} 943}
944// ----------------------------------------------------------------------------- 944
945OUnoObject& OUnoObject::operator=(const OUnoObject& rObj)
946{
947 if( this == &rObj )
948 return *this;
949 SdrUnoObj::operator=(rObj);
950
951 Reference<XPropertySet> xSource(const_cast<OUnoObject&>(rObj).getUnoShape(), uno::UNO_QUERY);
952 Reference<XPropertySet> xDest(getUnoShape(), uno::UNO_QUERY);
953 if ( xSource.is() && xDest.is() )
954 comphelper::copyProperties(xSource.get(), xDest.get());
955
956 return *this;
957}
958
945OUnoObject* OUnoObject::Clone() const 959OUnoObject* OUnoObject::Clone() const
946{ 960{
947 OUnoObject* pClone = CloneHelper< OUnoObject >(); 961 return CloneHelper< OUnoObject >();
948 if ( pClone )
949 {
950 Reference<XPropertySet> xSource(const_cast<OUnoObject*>(this)->getUnoShape(),uno::UNO_QUERY);
951 Reference<XPropertySet> xDest(pClone->getUnoShape(),uno::UNO_QUERY);
952 if ( xSource.is() && xDest.is() )
953 comphelper::copyProperties(xSource.get(),xDest.get());
954 }
955 return pClone;
956} 962}
957//---------------------------------------------------------------------------- 963//----------------------------------------------------------------------------
958// OOle2Obj 964// OOle2Obj
@@ -1154,22 +1160,32 @@ uno::Reference< chart2::data::XDatabaseDataProvider > lcl_getDataProvider(const
1154 } 1160 }
1155 return xSource; 1161 return xSource;
1156} 1162}
1157// ----------------------------------------------------------------------------- 1163
1158// Clone() soll eine komplette Kopie des Objektes erzeugen. 1164OOle2Obj& OOle2Obj::operator=(const OOle2Obj& rObj)
1159OOle2Obj* OOle2Obj::Clone() const
1160{ 1165{
1161 OOle2Obj* pObj = CloneHelper< OOle2Obj >(); 1166 if( this == &rObj )
1162 OReportModel* pRptModel = static_cast<OReportModel*>(GetModel()); 1167 return *this;
1163 svt::EmbeddedObjectRef::TryRunningState( pObj->GetObjRef() ); 1168 SdrOle2Obj::operator=(rObj);
1164 pObj->impl_createDataProvider_nothrow(pRptModel->getReportDefinition().get());
1165 1169
1166 uno::Reference< chart2::data::XDatabaseDataProvider > xSource( lcl_getDataProvider(GetObjRef()) ); 1170 OReportModel* pRptModel = static_cast<OReportModel*>(rObj.GetModel());
1167 uno::Reference< chart2::data::XDatabaseDataProvider > xDest( lcl_getDataProvider(pObj->GetObjRef()) ); 1171 svt::EmbeddedObjectRef::TryRunningState( GetObjRef() );
1172 impl_createDataProvider_nothrow(pRptModel->getReportDefinition().get());
1173
1174 uno::Reference< chart2::data::XDatabaseDataProvider > xSource( lcl_getDataProvider(rObj.GetObjRef()) );
1175 uno::Reference< chart2::data::XDatabaseDataProvider > xDest( lcl_getDataProvider(GetObjRef()) );
1168 if ( xSource.is() && xDest.is() ) 1176 if ( xSource.is() && xDest.is() )
1169 comphelper::copyProperties(xSource.get(),xDest.get()); 1177 comphelper::copyProperties(xSource.get(),xDest.get());
1170 1178
1171 pObj->initializeChart(pRptModel->getReportDefinition().get()); 1179 initializeChart(pRptModel->getReportDefinition().get());
1172 return pObj; 1180
1181 return *this;
1182}
1183
1184// -----------------------------------------------------------------------------
1185// Clone() soll eine komplette Kopie des Objektes erzeugen.
1186OOle2Obj* OOle2Obj::Clone() const
1187{
1188 return CloneHelper< OOle2Obj >();
1173} 1189}
1174// ----------------------------------------------------------------------------- 1190// -----------------------------------------------------------------------------
1175void OOle2Obj::impl_createDataProvider_nothrow(const uno::Reference< frame::XModel>& _xModel) 1191void OOle2Obj::impl_createDataProvider_nothrow(const uno::Reference< frame::XModel>& _xModel)