From 20072a303d19d5a31a085a3ea34d3a98cd5b28d2 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 29 Sep 2017 19:18:34 +0200 Subject: [PATCH] fix dangling pointer when cancelling multi-transform task panel --- src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp | 9 +++++++++ src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h | 6 +++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp index 406ca2b8a9..57044cde9b 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp @@ -191,6 +191,13 @@ void TaskMultiTransformParameters::onFeatureDeleted(void) recomputeFeature(); } +void TaskMultiTransformParameters::slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj) +{ + if (Obj.getObject() == this->subFeature) + this->subFeature = nullptr; + TaskTransformedParameters::slotDeletedObject(Obj); +} + void TaskMultiTransformParameters::closeSubTask() { if (subTask) { @@ -209,6 +216,8 @@ void TaskMultiTransformParameters::onTransformDelete() std::vector transformFeatures = pcMultiTransform->Transformations.getValues(); App::DocumentObject* feature = transformFeatures[row]; + if (feature == this->subFeature) + this->subFeature = nullptr; pcMultiTransform->getDocument()->removeObject(feature->getNameInDocument()); closeSubTask(); diff --git a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h index 0b7b30de70..b2ac86fdbf 100644 --- a/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h +++ b/src/Mod/PartDesign/Gui/TaskMultiTransformParameters.h @@ -61,7 +61,9 @@ public: const std::vector getTransformFeatures(void) const; /// Return the currently active subFeature - PartDesign::Transformed* getSubFeature(void) { return subFeature; } + PartDesign::Transformed* getSubFeature(void) { + return subFeature; + } virtual void apply(); @@ -81,6 +83,8 @@ private Q_SLOTS: // a subFeature so as to revert the changes of an edit operation virtual void onUpdateView(bool); virtual void onFeatureDeleted(void); + /** Notifies when the object is about to be removed. */ + virtual void slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj); protected: virtual void changeEvent(QEvent *e);