From 900d5ae25596ff1381fa6ee95835702a7dee385d Mon Sep 17 00:00:00 2001 From: Billy Huddleston Date: Sat, 15 Nov 2025 17:19:10 -0500 Subject: [PATCH] CAM: Fix crash when Path panel widgets are deleted Prevent RuntimeError by safely handling missing or deleted geometry import widgets in Path operation panels. This ensures the UI update code does not fail if the underlying C++ objects are destroyed, improving stability when panels are closed or the UI changes. src/Mod/CAM/Path/Op/Base.py: - Wrap geometry import widget access in try/except to avoid crashes - Add error handling for panel widget deletion scenarios --- src/Mod/CAM/Path/Op/Gui/Base.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/Mod/CAM/Path/Op/Gui/Base.py b/src/Mod/CAM/Path/Op/Gui/Base.py index 25e4668551..d3b0557dcd 100644 --- a/src/Mod/CAM/Path/Op/Gui/Base.py +++ b/src/Mod/CAM/Path/Op/Gui/Base.py @@ -602,15 +602,23 @@ class TaskPanelBaseGeometryPage(TaskPanelPage): # Load available operations into combobox if len(availableOps) > 0: # Populate the operations list - panel.geometryImportList.blockSignals(True) - panel.geometryImportList.clear() - availableOps.sort() - for opLbl in availableOps: - panel.geometryImportList.addItem(opLbl) - panel.geometryImportList.blockSignals(False) + try: + panel.geometryImportList.blockSignals(True) + panel.geometryImportList.clear() + availableOps.sort() + for opLbl in availableOps: + panel.geometryImportList.addItem(opLbl) + panel.geometryImportList.blockSignals(False) + except (AttributeError, RuntimeError): + # Widget doesn't exist in UI or C++ object already deleted + pass else: - panel.geometryImportList.hide() - panel.geometryImportButton.hide() + try: + panel.geometryImportList.hide() + panel.geometryImportButton.hide() + except (AttributeError, RuntimeError): + # Widget doesn't exist in UI or C++ object already deleted + pass def getTitle(self, obj): return translate("PathOp", "Base Geometry")