diff --git a/scripts/joinmarket-qt.py b/scripts/joinmarket-qt.py index f3f11d0..11be9ed 100755 --- a/scripts/joinmarket-qt.py +++ b/scripts/joinmarket-qt.py @@ -443,7 +443,7 @@ class SpendTab(QWidget): return False return True - def generateTumbleSchedule(self): + async def generateTumbleSchedule(self): if not mainWindow.wallet_service: asyncio.ensure_future( JMQtMessageBox(self, "Cannot start without a loaded wallet.", @@ -452,7 +452,8 @@ class SpendTab(QWidget): #needs a set of tumbler options and destination addresses, so needs #a wizard wizard = ScheduleWizard() - wizard_return = wizard.exec_() + wizard.open() + wizard_return = await wizard.result() if wizard_return == QDialog.Rejected: return try: @@ -597,7 +598,8 @@ class SpendTab(QWidget): self.schedule_set_button = QPushButton('Choose schedule file') self.schedule_set_button.clicked.connect(self.selectSchedule) self.schedule_generate_button = QPushButton('Generate tumble schedule') - self.schedule_generate_button.clicked.connect(self.generateTumbleSchedule) + self.schedule_generate_button.clicked.connect( + lambda: asyncio.ensure_future(self.generateTumbleSchedule())) self.sch_startButton = QPushButton('Run schedule') self.sch_startButton.setEnabled(False) #not runnable until schedule chosen self.sch_startButton.clicked.connect(self.startMultiple) diff --git a/scripts/qtsupport.py b/scripts/qtsupport.py index 9c08977..57c0a40 100644 --- a/scripts/qtsupport.py +++ b/scripts/qtsupport.py @@ -915,8 +915,12 @@ class SchIntroPage(QWizardPage): """ class ScheduleWizard(QWizard): + def __init__(self): super().__init__() + self.setModal(True) + self.result_fut = asyncio.get_event_loop().create_future() + self.finished.connect(self.on_finished) self.setWindowTitle("Joinmarket schedule generator") self.setPage(0, SchIntroPage(self)) self.setPage(1, SchDynamicPage1(self)) @@ -924,11 +928,18 @@ class ScheduleWizard(QWizard): #self.setPage(3, SchStaticPage(self)) self.setPage(3, SchFinishPage(self)) + @QtCore.Slot(QMessageBox.StandardButton) + def on_finished(self, button): + self.result_fut.set_result(button) + + async def result(self): + await self.result_fut + return self.result_fut.result() + def get_name(self): #TODO de-hardcode generated name return "TUMBLE.schedule" - def get_destaddrs(self): return self.destaddrs