From fd28d94f6a4e9e6c496644a73628d7f49bdb7705 Mon Sep 17 00:00:00 2001 From: CalligaroV Date: Sat, 7 Sep 2024 21:19:01 +0200 Subject: [PATCH] Sketcher/Gui: check if there's a 3D view while executing ViewProviderSketch::unsetEdit() Signed-off-by: CalligaroV --- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 33 ++++++++++++--------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index abed2b5f52..b075bc7482 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -3319,23 +3319,28 @@ void ViewProviderSketch::unsetEdit(int ModNum) if (sketchHandler) deactivateHandler(); - // Resets the override draw style mode when leaving the sketch edit mode. - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath( - "User parameter:BaseApp/Preferences/Mod/Sketcher/General"); - auto disableShadedView = hGrp->GetBool("DisableShadedView", true); - if (disableShadedView) { - Gui::Document* doc = Gui::Application::Instance->activeDocument(); - Gui::MDIView* mdi = doc->getActiveView(); - Gui::View3DInventorViewer* viewer = static_cast(mdi)->getViewer(); + Gui::MDIView* mdi = getInventorView(); + // handle the override draw style mode only if there's a 3D view, otherwise SIGSEGV may + // occur as described in https://github.com/FreeCAD/FreeCAD/issues/15918 + if (mdi) { + + // Resets the override draw style mode when leaving the sketch edit mode. ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath( - "User parameter:BaseApp/Preferences/Mod/Sketcher/General"); - auto OverrideMode = hGrp->GetASCII("OverrideMode", "As Is"); + "User parameter:BaseApp/Preferences/Mod/Sketcher/General"); + auto disableShadedView = hGrp->GetBool("DisableShadedView", true); + if (disableShadedView) { + Gui::View3DInventorViewer* viewer = + static_cast(mdi)->getViewer(); - if (viewer) - { - viewer->updateOverrideMode(OverrideMode); - viewer->setOverrideMode(OverrideMode); + ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath( + "User parameter:BaseApp/Preferences/Mod/Sketcher/General"); + auto OverrideMode = hGrp->GetASCII("OverrideMode", "As Is"); + + if (viewer) { + viewer->updateOverrideMode(OverrideMode); + viewer->setOverrideMode(OverrideMode); + } } }