diff -r 907860ca00d6 -r ee14e64c2eeb eric7/Project/ProjectTranslationsBrowser.py --- a/eric7/Project/ProjectTranslationsBrowser.py Sun May 23 16:35:15 2021 +0200 +++ b/eric7/Project/ProjectTranslationsBrowser.py Sun May 23 16:36:32 2021 +0200 @@ -14,9 +14,12 @@ import functools import contextlib -from PyQt6.QtCore import pyqtSignal, QProcess +from PyQt6.QtCore import pyqtSignal, Qt, QProcess, QEventLoop +from PyQt6.QtGui import QGuiApplication, QCursor from PyQt6.QtWidgets import QDialog, QMenu +from EricGui.EricOverrideCursor import EricOverridenCursor + from EricWidgets import EricMessageBox from EricWidgets.EricApplication import ericApp @@ -971,6 +974,10 @@ if not self.__pylupdateProcesses: # all done self.pylupdateProcRunning = False + + QGuiApplication.restoreOverrideCursor() + QGuiApplication.processEvents( + QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents) def __generateTSFile(self, noobsolete=False, generateAll=True): """ @@ -1015,7 +1022,9 @@ if self.project.getProjectLanguage() in [ "Python", "Python3" ]: - if self.project.getProjectType() not in ["PyQt6", "PyQt6C"]: + if self.project.getProjectType() not in [ + "PyQt6", "PyQt6C", "E7Plugin" + ]: ok = self.__writeTempProjectFile(langs, [".py"]) if not ok: return @@ -1036,7 +1045,7 @@ return self.__pylupdateProcesses = [] - if self.project.getProjectType() in ["PyQt6", "PyQt6C"]: + if self.project.getProjectType() in ["PyQt6", "PyQt6C", "E7Plugin"]: if langs: langs = [self.project.getRelativePath(lang.fileName()) for lang in langs if lang.fileName().endswith('.ts')] @@ -1056,6 +1065,12 @@ self.tr("Translation file generation"), self.tr("""No translation files (*.ts) selected.""")) return + + QGuiApplication.setOverrideCursor( + QCursor(Qt.CursorShape.WaitCursor)) + QGuiApplication.processEvents( + QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents) + for lang in langs: proc = QProcess() args = [] @@ -1083,14 +1098,20 @@ self.pylupdateProcRunning = True self.__pylupdateProcesses.append((proc, "")) else: - EricMessageBox.critical( - self, - self.tr('Process Generation Error'), - self.tr( - 'Could not start {0}.<br>' - 'Ensure that it is in the search path.' - ).format(self.pylupdate)) + with EricOverridenCursor(): + EricMessageBox.critical( + self, + self.tr('Process Generation Error'), + self.tr( + 'Could not start {0}.<br>' + 'Ensure that it is in the search path.' + ).format(self.pylupdate)) else: + QGuiApplication.setOverrideCursor( + QCursor(Qt.CursorShape.WaitCursor)) + QGuiApplication.processEvents( + QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents) + for tempProjectFile in self.__tmpProjects[:]: proc = QProcess() args = [] @@ -1119,18 +1140,25 @@ self.pylupdateProcRunning = True self.__pylupdateProcesses.append((proc, tempProjectFile)) else: - EricMessageBox.critical( - self, - self.tr('Process Generation Error'), - self.tr( - 'Could not start {0}.<br>' - 'Ensure that it is in the search path.' - ).format(self.pylupdate)) + with EricOverridenCursor(): + EricMessageBox.critical( + self, + self.tr('Process Generation Error'), + self.tr( + 'Could not start {0}.<br>' + 'Ensure that it is in the search path.' + ).format(self.pylupdate)) # cleanup with contextlib.suppress(OSError): self.__tmpProjects.remove(tempProjectFile) os.remove(tempProjectFile) + if not self.__pylupdateProcesses: + # no processes could be started, revert override cursor + QGuiApplication.restoreOverrideCursor() + QGuiApplication.processEvents( + QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents) + def __generateAll(self): """ Private method to generate all translation files (.ts) for Qt Linguist.