From 4228911609488fbdfdebabad21267b034df527c4 Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Mon, 5 Feb 2024 21:07:33 +0100 Subject: [PATCH] qml: close TxDetails on TX remove only after the 'removed_transaction' event has been received, so the history model doesn't refresh too early (fixes #8782) --- electrum/gui/qml/components/TxDetails.qml | 5 ++++- electrum/gui/qml/qetxdetails.py | 10 ++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/electrum/gui/qml/components/TxDetails.qml b/electrum/gui/qml/components/TxDetails.qml index 621b76d58..cc19b42de 100644 --- a/electrum/gui/qml/components/TxDetails.qml +++ b/electrum/gui/qml/components/TxDetails.qml @@ -473,10 +473,13 @@ Pane { var dialog = app.messageDialog.createObject(app, { text: message, yesno: true }) dialog.accepted.connect(function() { txdetails.removeLocalTx(true) - root.close() + root.enabled = false }) dialog.open() } + onTxRemoved: { + root.close() + } Component.onCompleted: { if (root.txid) { txdetails.txid = root.txid diff --git a/electrum/gui/qml/qetxdetails.py b/electrum/gui/qml/qetxdetails.py index 79a6a1adb..dff08c374 100644 --- a/electrum/gui/qml/qetxdetails.py +++ b/electrum/gui/qml/qetxdetails.py @@ -19,6 +19,7 @@ class QETxDetails(QObject, QtEventListener): _logger = get_logger(__name__) confirmRemoveLocalTx = pyqtSignal([str], arguments=['message']) + txRemoved = pyqtSignal() saveTxError = pyqtSignal([str,str], arguments=['code', 'message']) saveTxSuccess = pyqtSignal() @@ -83,6 +84,12 @@ class QETxDetails(QObject, QtEventListener): self._logger.debug(f'new_transaction event for our txid {self._txid}') self.update() + @event_listener + def on_event_removed_transaction(self, wallet, tx): + if wallet == self._wallet.wallet and tx.txid() == self._txid: + self._logger.debug(f'removed my transaction {tx.txid()}') + self.txRemoved.emit() + walletChanged = pyqtSignal() @pyqtProperty(QEWallet, notify=walletChanged) def wallet(self): @@ -426,7 +433,7 @@ class QETxDetails(QObject, QtEventListener): self._can_broadcast = False self.detailsChanged.emit() - @pyqtSlot(str,str,str) + @pyqtSlot(str, str, str) def onBroadcastFailed(self, txid, code, reason): if txid != self._txid: return @@ -461,7 +468,6 @@ class QETxDetails(QObject, QtEventListener): # NOTE: from here, the tx/txid is unknown and all properties are invalid. # UI should close TxDetails and avoid interacting with this qetxdetails instance. - self._txid = None self._tx = None @pyqtSlot()