From 1c8734de53b6b5628d5bfa47cda5ff23528077dc Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 5 Aug 2016 15:55:19 +0200 Subject: [PATCH] fix crash in CSsysDragger dialog when closing the document beforehand --- src/Gui/TaskCSysDragger.cpp | 37 +++++++++++++++++++------------------ src/Gui/TaskCSysDragger.h | 3 ++- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/Gui/TaskCSysDragger.cpp b/src/Gui/TaskCSysDragger.cpp index 8e5c06811..bbc968f30 100644 --- a/src/Gui/TaskCSysDragger.cpp +++ b/src/Gui/TaskCSysDragger.cpp @@ -30,13 +30,13 @@ #include #include -#include +#include #include "QuantitySpinBox.h" #include #include -#include -#include -#include +#include +#include +#include #include "TaskCSysDragger.h" @@ -57,17 +57,19 @@ static double lastTranslationIncrement = 1.0; static double lastRotationIncrement = degreesToRadains(15.0); TaskCSysDragger::TaskCSysDragger(Gui::ViewProviderGeometryObject* vpObjectIn, Gui::SoFCCSysDragger* draggerIn) : - vpObject(vpObjectIn), dragger(draggerIn) + dragger(draggerIn) { - assert(vpObject); - assert(dragger); - + assert(vpObjectIn); + assert(draggerIn); + vpObject = vpObjectIn->getObject(); + dragger->ref(); + setupGui(); } TaskCSysDragger::~TaskCSysDragger() { - + dragger->unref(); } void TaskCSysDragger::setupGui() @@ -132,15 +134,14 @@ bool TaskCSysDragger::accept() lastTranslationIncrement = dragger->translationIncrement.getValue(); lastRotationIncrement = dragger->rotationIncrement.getValue(); - assert(vpObject); - App::DocumentObject* dObject = vpObject->getObject(); - assert(dObject); - Gui::Document* document = Gui::Application::Instance->getDocument(dObject->getDocument()); - assert(document); - document->commitCommand(); - document->resetEdit(); - document->getDocument()->recompute(); - + App::DocumentObject* dObject = vpObject.getObject(); + if (dObject) { + Gui::Document* document = Gui::Application::Instance->getDocument(dObject->getDocument()); + assert(document); + document->commitCommand(); + document->resetEdit(); + document->getDocument()->recompute(); + } return Gui::TaskView::TaskDialog::accept(); } diff --git a/src/Gui/TaskCSysDragger.h b/src/Gui/TaskCSysDragger.h index c9e16d698..bf348ec9f 100644 --- a/src/Gui/TaskCSysDragger.h +++ b/src/Gui/TaskCSysDragger.h @@ -24,6 +24,7 @@ #define TASKCSYSDRAGGER_H #include +#include class QuantitySpinBox; @@ -47,7 +48,7 @@ namespace Gui void onRIncrementSlot(double freshValue); private: void setupGui(); - ViewProviderGeometryObject *vpObject; + App::DocumentObjectT vpObject; SoFCCSysDragger *dragger; QuantitySpinBox *tSpinBox; QuantitySpinBox *rSpinBox;