Skip to content

Commit aa544a1

Browse files
committed
Only use a temporary feedback object when running algorithms
Otherwise canceling a run causes all future runs to be canceled
1 parent 2d2c229 commit aa544a1

File tree

3 files changed

+15
-12
lines changed

3 files changed

+15
-12
lines changed

python/plugins/processing/gui/AlgorithmDialog.py

+8-6
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ def accept(self):
164164

165165
checkCRS = ProcessingConfig.getSetting(ProcessingConfig.WARN_UNMATCHING_CRS)
166166
try:
167+
feedback = self.createFeedback()
168+
167169
parameters = self.getParamValues()
168170

169171
QgsMessageLog.logMessage(str(parameters), 'Processing', QgsMessageLog.CRITICAL)
@@ -220,8 +222,8 @@ def accept(self):
220222
self.tr('<b>Algorithm {0} starting...</b>').format(self.alg.displayName()))
221223

222224
if self.iterateParam:
223-
if executeIterating(self.alg, parameters, self.iterateParam, context, self.feedback):
224-
self.finish(parameters, context)
225+
if executeIterating(self.alg, parameters, self.iterateParam, context, feedback):
226+
self.finish(parameters, context, feedback)
225227
else:
226228
QApplication.restoreOverrideCursor()
227229
self.resetGUI()
@@ -231,9 +233,9 @@ def accept(self):
231233
#if command:
232234
# ProcessingLog.addToLog(command)
233235
self.buttonCancel.setEnabled(self.alg.flags() & QgsProcessingAlgorithm.FlagCanCancel)
234-
result = executeAlgorithm(self.alg, parameters, context, self.feedback)
236+
result = executeAlgorithm(self.alg, parameters, context, feedback)
235237
self.buttonCancel.setEnabled(False)
236-
self.finish(result, context)
238+
self.finish(result, context, feedback)
237239
#TODO
238240
#else:
239241
# QApplication.restoreOverrideCursor()
@@ -251,12 +253,12 @@ def accept(self):
251253
self.bar.pushMessage("", self.tr("Wrong or missing parameter value: {0}").format(e.parameter.description()),
252254
level=QgsMessageBar.WARNING, duration=5)
253255

254-
def finish(self, result, context):
256+
def finish(self, result, context, feedback):
255257
keepOpen = ProcessingConfig.getSetting(ProcessingConfig.KEEP_DIALOG_OPEN)
256258

257259
if self.iterateParam is None:
258260

259-
if not handleAlgorithmResults(self.alg, context, self.feedback, not keepOpen):
261+
if not handleAlgorithmResults(self.alg, context, feedback, not keepOpen):
260262
self.resetGUI()
261263
return
262264

python/plugins/processing/gui/AlgorithmDialogBase.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,6 @@ def __init__(self, alg):
9595
handleLayout.addStretch()
9696
splitterHandle.setLayout(handleLayout)
9797

98-
self.feedback = AlgorithmDialogFeedback(self)
99-
self.feedback.progressChanged.connect(self.setPercentage)
100-
self.buttonCancel.clicked.connect(self.feedback.cancel)
101-
10298
self.settings = QgsSettings()
10399
self.splitter.restoreState(self.settings.value("/Processing/dialogBaseSplitter", QByteArray()))
104100
self.restoreGeometry(self.settings.value("/Processing/dialogBase", QByteArray()))
@@ -147,6 +143,12 @@ def linkClicked(url):
147143
self.showDebug = ProcessingConfig.getSetting(
148144
ProcessingConfig.SHOW_DEBUG_IN_DIALOG)
149145

146+
def createFeedback(self):
147+
feedback = AlgorithmDialogFeedback(self)
148+
feedback.progressChanged.connect(self.setPercentage)
149+
self.buttonCancel.clicked.connect(feedback.cancel)
150+
return feedback
151+
150152
def formatHelp(self, alg):
151153
text = alg.shortHelpString()
152154
if not text:
@@ -223,7 +225,7 @@ def reject(self):
223225
self._saveGeometry()
224226
super(AlgorithmDialogBase, self).reject()
225227

226-
def finish(self, context):
228+
def finish(self, context, feedback):
227229
pass
228230

229231
def toggleCollapsed(self):

python/plugins/processing/gui/Postprocessing.py

-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ def handleAlgorithmResults(alg, context, feedback=None, showResults=True):
5656
feedback.setProgressText(QCoreApplication.translate('Postprocessing', 'Loading resulting layers'))
5757
i = 0
5858
for l, details in context.layersToLoadOnCompletion().items():
59-
feedback.setProgress(100 * i / float(len(context.layersToLoadOnCompletion())))
6059
try:
6160
layer = QgsProcessingUtils.mapLayerFromString(l, context)
6261
if layer is not None:

0 commit comments

Comments
 (0)