The 3mf workspace reader no longer locks application if it is accedently called from main

CURA-1263
This commit is contained in:
Jaime van Kessel 2016-11-22 14:57:44 +01:00
parent 60d2d0d092
commit fa174763cf
2 changed files with 15 additions and 4 deletions

View file

@ -113,7 +113,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
self._dialog.setQualityChangesConflict(quality_changes_conflict)
self._dialog.setMaterialConflict(material_conflict)
self._dialog.show()
# Block until the dialog is closed.
self._dialog.waitForClose()
if self._dialog.getResult() == {}:
return WorkspaceReader.PreReadResult.cancelled

View file

@ -1,4 +1,4 @@
from PyQt5.QtCore import Qt, QUrl, pyqtSignal, pyqtSlot, QObject, pyqtProperty
from PyQt5.QtCore import Qt, QUrl, pyqtSignal, pyqtSlot, QObject, pyqtProperty, QCoreApplication
from PyQt5.QtQml import QQmlComponent, QQmlContext
from UM.PluginRegistry import PluginRegistry
from UM.Application import Application
@ -6,6 +6,7 @@ from UM.Logger import Logger
import os
import threading
import time
class WorkspaceDialog(QObject):
showDialogSignal = pyqtSignal()
@ -82,7 +83,8 @@ class WorkspaceDialog(QObject):
def show(self):
# Emit signal so the right thread actually shows the view.
self._lock.acquire()
if threading.current_thread() != threading.main_thread():
self._lock.acquire()
# Reset the result
self._result = {"machine": self._default_strategy,
"quality_changes": self._default_strategy,
@ -116,8 +118,14 @@ class WorkspaceDialog(QObject):
## Block thread until the dialog is closed.
def waitForClose(self):
if self._visible:
self._lock.acquire()
self._lock.release()
if threading.current_thread() != threading.main_thread():
self._lock.acquire()
self._lock.release()
else:
# If this is not run from a separate thread, we need to ensure that the events are still processed.
while self._visible:
time.sleep(1 / 50)
QCoreApplication.processEvents() # Ensure that the GUI does not freeze.
def __show(self):
if self._view is None: