diff --git a/src/Gui/Application.cpp b/src/Gui/Application.cpp index b4330209f6..be4cef5e98 100644 --- a/src/Gui/Application.cpp +++ b/src/Gui/Application.cpp @@ -971,6 +971,8 @@ Gui::MDIView* Application::editViewOfNode(SoNode *node) const } void Application::setEditDocument(Gui::Document *doc) { + if(doc == d->editDocument) + return; if(!doc) d->editDocument = 0; for(auto &v : d->documents) diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index e28f44242b..e17726700f 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -462,7 +462,12 @@ void Document::_resetEdit(void) } d->_editViewProvider->finishEditing(); - if (d->_editViewProvider->isDerivedFrom(ViewProviderDocumentObject::getClassTypeId())) + + // Have to check d->_editViewProvider below, because there is a chance + // the editing object gets deleted inside the above call to + // 'finishEditing()', which will trigger our slotDeletedObject(), which + // nullifies _editViewProvider. + if (d->_editViewProvider && d->_editViewProvider->isDerivedFrom(ViewProviderDocumentObject::getClassTypeId())) signalResetEdit(*(static_cast(d->_editViewProvider))); d->_editViewProvider = 0;