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
@ -8,8 +12,16 @@ class CuraActions(QObject):
@pyqtSlot()
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()
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)