From 6bbc5f8553c85bc0fd09b40944a5c09004244b23 Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Thu, 24 Oct 2024 12:33:12 +0200 Subject: [PATCH] qt: wizard: keep wizard stack in a consistent state if load_next_component raises --- electrum/gui/qt/wizard/wizard.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/electrum/gui/qt/wizard/wizard.py b/electrum/gui/qt/wizard/wizard.py index 211624fcd..6da8de692 100644 --- a/electrum/gui/qt/wizard/wizard.py +++ b/electrum/gui/qt/wizard/wizard.py @@ -143,6 +143,7 @@ class QEAbstractWizard(QDialog, MessageBoxMixin): comp = self.view_to_component(view) try: + self._logger.debug(f'load_next_component: {comp!r}') page = comp(self.main_widget, self) except Exception as e: self._logger.error(f'not a class: {comp!r}') @@ -151,13 +152,11 @@ class QEAbstractWizard(QDialog, MessageBoxMixin): page.params = params page.on_ready() # call before component emits any signals - self._logger.debug(f'load_next_component: {page=!r}') - page.updated.connect(self.on_page_updated) # add to stack and update wizard - self.main_widget.setCurrentIndex(self.main_widget.addWidget(page)) page.apply() + self.main_widget.setCurrentIndex(self.main_widget.addWidget(page)) self.update() @pyqtSlot(object) @@ -218,7 +217,11 @@ class QEAbstractWizard(QDialog, MessageBoxMixin): self.prev() # rollback the submit above else: view = self.submit(wd) - self.load_next_component(view.view, view.wizard_data, view.params) + try: + self.load_next_component(view.view, view.wizard_data, view.params) + except Exception as e: + self.prev() # rollback the submit above + raise e def start_wizard(self) -> 'WizardViewState': self.start()