Defer opening the webbrowser until the next run of the event loop

Opening a web browser from a signal handler connected to a menu
crashes Cura, so instead defer the call.

Fixes #63
This commit is contained in:
Arjen Hiemstra 2015-06-23 11:54:22 +02:00
parent 72b1302f9e
commit d937eb7a17

View File

@ -1,4 +1,8 @@
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, pyqtProperty from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, pyqtProperty, QUrl
from PyQt5.QtGui import QDesktopServices
from UM.Event import CallFunctionEvent
from UM.Application import Application
import webbrowser import webbrowser
@ -8,8 +12,16 @@ class CuraActions(QObject):
@pyqtSlot() @pyqtSlot()
def openDocumentation(self): def openDocumentation(self):
webbrowser.open("http://ultimaker.com/en/support/software") # Starting a web browser from a signal handler connected to a menu will crash on windows.
# So instead, defer the call to the next run of the event loop, since that does work.
# Note that weirdly enough, only signal handlers that open a web browser fail like that.
event = CallFunctionEvent(self._openUrl, [QUrl("http://ultimaker.com/en/support/software")], {})
Application.getInstance().functionEvent(event)
@pyqtSlot() @pyqtSlot()
def openBugReportPage(self): def openBugReportPage(self):
webbrowser.open("http://github.com/Ultimaker/Cura/issues") event = CallFunctionEvent(self._openUrl, [QUrl("http://github.com/Ultimaker/Cura/issues")], {})
Application.getInstance().functionEvent(event)
def _openUrl(self, url):
QDesktopServices.openUrl(url)