diff --git a/pkg/freecad/silo_commands.py b/pkg/freecad/silo_commands.py index a5e1ca2..f7591c1 100644 --- a/pkg/freecad/silo_commands.py +++ b/pkg/freecad/silo_commands.py @@ -988,17 +988,14 @@ class Silo_Open: results_table.setItem(row, 4, QtGui.QTableWidgetItem(data["modified"])) results_table.resizeColumnsToContents() + _open_after_close = [None] + def open_selected(): selected = results_table.selectedItems() if not selected: return row = selected[0].row() - data = results_data[row] - - if data["path"]: - FreeCAD.openDocument(data["path"]) - else: - _sync.open_item(data["part_number"]) + _open_after_close[0] = dict(results_data[row]) dialog.accept() search_input.textChanged.connect(lambda: do_search()) @@ -1018,6 +1015,16 @@ class Silo_Open: do_search() dialog.exec_() + # Open the document AFTER the dialog has fully closed so that + # heavy document loads (especially Assembly files) don't run + # inside the dialog's nested event loop, which can cause crashes. + data = _open_after_close[0] + if data is not None: + if data.get("path"): + FreeCAD.openDocument(data["path"]) + else: + _sync.open_item(data["part_number"]) + def IsActive(self): return True