Browse Source

Merge pull request #9462 from Ultimaker/CURA-7813_fix_crash_globalstack

Workaround: Before closing the window, remove the global stack
Jelle Spijker 4 years ago
parent
commit
a277adae64
1 changed files with 9 additions and 0 deletions
  1. 9 0
      cura/CuraApplication.py

+ 9 - 0
cura/CuraApplication.py

@@ -603,6 +603,15 @@ class CuraApplication(QtApplication):
     @pyqtSlot()
     def closeApplication(self) -> None:
         Logger.log("i", "Close application")
+
+        # Workaround: Before closing the window, remove the global stack.
+        # This is necessary because as the main window gets closed, hundreds of QML elements get updated which often
+        # request the global stack. However as the Qt-side of the Machine Manager is being dismantled, the conversion of
+        # the Global Stack to a QObject fails.
+        # If instead we first take down the global stack, PyQt will just convert `None` to `null` which succeeds, and
+        # the QML code then gets `null` as the global stack and can deal with that as it deems fit.
+        self.getMachineManager().setActiveMachine(None)
+
         main_window = self.getMainWindow()
         if main_window is not None:
             main_window.close()