diff --git a/cura-lulzbot-wizard.patch b/cura-lulzbot-wizard.patch new file mode 100644 index 0000000..9bebd11 --- /dev/null +++ b/cura-lulzbot-wizard.patch @@ -0,0 +1,85 @@ +From 08c5f2133c9dbc8b986bc727c0b9768d9e45ccfd Mon Sep 17 00:00:00 2001 +From: Youness Alaoui +Date: Tue, 7 Jul 2015 15:48:07 -0400 +Subject: [PATCH] Prevent multiple calls to afterSplashCallback + +This fixes issue #133. Problem was that if splash.OnClose was called +before the afterSplashCallback was done (such as, if it's blocking +on a configWizard), then the callback would be called again. +This also fixes a segmentation fault if you cancel the initial config wizard +by making sure the callback is done outside the event thread and splash +destruction is done at the proper time and from the proper thread. +--- + Cura/gui/app.py | 18 +++++++++--------- + Cura/gui/splashScreen.py | 8 ++++---- + 2 files changed, 13 insertions(+), 13 deletions(-) + +diff --git a/Cura/gui/app.py b/Cura/gui/app.py +index 8f4fb00..3caf494 100644 +--- a/Cura/gui/app.py ++++ b/Cura/gui/app.py +@@ -99,6 +99,12 @@ def Win32SocketListener(self, port): + except: + pass + ++ def destroySplashScreen(self): ++ if self.splash is not None: ++ self.splash.Show(False) ++ self.splash.Destroy() ++ self.splash = None ++ + def afterSplashCallback(self): + #These imports take most of the time and thus should be done after showing the splashscreen + import webbrowser +@@ -134,26 +140,20 @@ def afterSplashCallback(self): + exampleFile = os.path.normpath(os.path.join(resources.resourceBasePath, 'example', 'Rocktopus.stl')) + + self.loadFiles = [exampleFile] +- if self.splash is not None: +- self.splash.Show(False) +- self.splash = None ++ self.destroySplashScreen() + configWizard.ConfigWizard() + + if profile.getPreference('check_for_updates') == 'True': + newVersion = version.checkForNewerVersion() + if newVersion is not None: +- if self.splash is not None: +- self.splash.Show(False) +- self.splash = None ++ self.destroySplashScreen() + if wx.MessageBox(_("A new version of Cura is available, would you like to download?"), _("New version available"), wx.YES_NO | wx.ICON_INFORMATION) == wx.YES: + webbrowser.open(newVersion) + return + if profile.getMachineSetting('machine_name') == '': + return + self.mainWindow = mainWindow.mainWindow() +- if self.splash is not None: +- self.splash.Show(False) +- self.splash = None ++ self.destroySplashScreen() + self.SetTopWindow(self.mainWindow) + self.mainWindow.Show() + self.mainWindow.OnDropFiles(self.loadFiles) +diff --git a/Cura/gui/splashScreen.py b/Cura/gui/splashScreen.py +index 44bad77..a3568a0 100644 +--- a/Cura/gui/splashScreen.py ++++ b/Cura/gui/splashScreen.py +@@ -14,13 +14,13 @@ def __init__(self, callback): + # rectangle while the app is loading + self.Bind(wx.EVT_CLOSE, self.OnClose) + +- def DoDestroy(self): +- self.Destroy() + + def OnClose(self, e): + if self.callback: + # Avoid calling the callback twice +- self.callback() ++ cb = self.callback + self.callback = None +- wx.CallAfter(self.DoDestroy) ++ # The callback will destroy us ++ wx.CallAfter(cb) ++ + e.Skip()