From 50c9c910eab330859bd45592eb918f557e4cda7a Mon Sep 17 00:00:00 2001 From: wandererfan Date: Fri, 24 Jan 2025 11:16:38 -0500 Subject: [PATCH] [TD]fix crash on delete while dialog open (#18120) --- src/Mod/TechDraw/Gui/TaskProjGroup.cpp | 16 ++++++++++++++-- src/Mod/TechDraw/Gui/TaskProjGroup.h | 1 + 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Mod/TechDraw/Gui/TaskProjGroup.cpp b/src/Mod/TechDraw/Gui/TaskProjGroup.cpp index bdc1c9c06e..323894e3b3 100644 --- a/src/Mod/TechDraw/Gui/TaskProjGroup.cpp +++ b/src/Mod/TechDraw/Gui/TaskProjGroup.cpp @@ -76,6 +76,7 @@ TaskProjGroup::TaskProjGroup(TechDraw::DrawView* featView, bool mode) : ui->setupUi(this); m_page = view->findParentPage(); + m_viewName = view->getNameInDocument(); Gui::Document* activeGui = Gui::Application::Instance->getDocument(m_page->getDocument()); Gui::ViewProvider* vp = activeGui->getViewProvider(m_page); auto* dvp = static_cast(vp); @@ -797,10 +798,15 @@ bool TaskProjGroup::apply() bool TaskProjGroup::accept() { - Gui::Document* doc = Gui::Application::Instance->getDocument(view->getDocument()); + Gui::Document* doc = Gui::Application::Instance->getDocument(m_page->getDocument()); if (!doc) { return false; } + auto viewCheck = m_page->getDocument()->getObject(m_viewName.c_str()); + if (!viewCheck) { + // view has been deleted while this dialog is open + return false; + } if (multiView) { multiView->recomputeChildren(); @@ -814,11 +820,17 @@ bool TaskProjGroup::accept() bool TaskProjGroup::reject() { - Gui::Document* doc = Gui::Application::Instance->getDocument(view->getDocument()); + Gui::Document* doc = Gui::Application::Instance->getDocument(m_page->getDocument()); if (!doc) { return false; } + auto viewCheck = m_page->getDocument()->getObject(m_viewName.c_str()); + if (!viewCheck) { + // view has been deleted while this dialog is open + return false; + } + if (getCreateMode()) { //remove the object completely from the document const char* viewName = view->getNameInDocument(); diff --git a/src/Mod/TechDraw/Gui/TaskProjGroup.h b/src/Mod/TechDraw/Gui/TaskProjGroup.h index e6cd3bda98..501123e761 100644 --- a/src/Mod/TechDraw/Gui/TaskProjGroup.h +++ b/src/Mod/TechDraw/Gui/TaskProjGroup.h @@ -116,6 +116,7 @@ private: TechDraw::DrawView* view; TechDraw::DrawProjGroup* multiView; bool m_createMode; + std::string m_viewName; bool blockUpdate{true}; bool blockCheckboxes;