From 862eef57eb4aa042f87d9f19dc768a017b17dae6 Mon Sep 17 00:00:00 2001 From: pavltom Date: Tue, 31 Oct 2023 15:31:47 +0100 Subject: [PATCH] [TechDraw] Checkable menu item for Turn View Frames On/Off - segfault fix --- src/Mod/TechDraw/Gui/CommandDecorate.cpp | 37 +++++++++--------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/src/Mod/TechDraw/Gui/CommandDecorate.cpp b/src/Mod/TechDraw/Gui/CommandDecorate.cpp index c51772e607..4765fbedb5 100644 --- a/src/Mod/TechDraw/Gui/CommandDecorate.cpp +++ b/src/Mod/TechDraw/Gui/CommandDecorate.cpp @@ -47,6 +47,7 @@ #include #include "DrawGuiUtil.h" +#include "MDIViewPage.h" #include "TaskGeomHatch.h" #include "TaskHatch.h" #include "ViewProviderGeomHatch.h" @@ -310,21 +311,18 @@ Gui::Action *CmdTechDrawToggleFrame::createAction() void CmdTechDrawToggleFrame::activated(int iMsg) { Q_UNUSED(iMsg); - TechDraw::DrawPage* page = DrawGuiUtil::findPage(this); - if (!page) { - return; - } - std::string PageName = page->getNameInDocument(); - Gui::Document* activeGui = Gui::Application::Instance->getDocument(page->getDocument()); - Gui::ViewProvider* vp = activeGui->getViewProvider(page); - ViewProviderPage* vpp = dynamic_cast(vp); - - if (!vpp) { + auto mvp = dynamic_cast(Gui::getMainWindow()->activeWindow()); + if (!mvp) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("No TechDraw Page"), QObject::tr("Need a TechDraw Page for this command")); return; } + + ViewProviderPage* vpp = mvp->getViewProviderPage(); + if (!vpp) { + return; + } vpp->toggleFrameState(); Gui::Action *action = this->getAction(); @@ -335,22 +333,15 @@ void CmdTechDrawToggleFrame::activated(int iMsg) bool CmdTechDrawToggleFrame::isActive() { - TechDraw::DrawPage* page = DrawGuiUtil::findPage(this); - if (!page) { + auto mvp = dynamic_cast(Gui::getMainWindow()->activeWindow()); + if (!mvp) { return false; } - if (!DrawGuiUtil::needView(this, false)) { - return false; - } - - Gui::Document *activeGui = Gui::Application::Instance->getDocument(page->getDocument()); - ViewProviderPage *vpp = dynamic_cast(activeGui->getViewProvider(page)); - if (vpp) { - Gui::Action *action = this->getAction(); - if (action) { - action->setChecked(!vpp->getFrameState(), true); - } + ViewProviderPage* vpp = mvp->getViewProviderPage(); + Gui::Action *action = this->getAction(); + if (action) { + action->setChecked(vpp && !vpp->getFrameState(), true); } return true;