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 | |||
@@ -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 | |||
278 | private: | 282 | private: |
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 | |
945 | OUnoObject& 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 | |||
945 | OUnoObject* OUnoObject::Clone() const | 959 | OUnoObject* 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. | 1164 | OOle2Obj& OOle2Obj::operator=(const OOle2Obj& rObj) |
1159 | OOle2Obj* 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. | ||
1186 | OOle2Obj* OOle2Obj::Clone() const | ||
1187 | { | ||
1188 | return CloneHelper< OOle2Obj >(); | ||
1173 | } | 1189 | } |
1174 | // ----------------------------------------------------------------------------- | 1190 | // ----------------------------------------------------------------------------- |
1175 | void OOle2Obj::impl_createDataProvider_nothrow(const uno::Reference< frame::XModel>& _xModel) | 1191 | void OOle2Obj::impl_createDataProvider_nothrow(const uno::Reference< frame::XModel>& _xModel) |