diff --git a/electrum/gui/qml/components/ReceiveDialog.qml b/electrum/gui/qml/components/ReceiveDialog.qml index c5be650ad..df77d1290 100644 --- a/electrum/gui/qml/components/ReceiveDialog.qml +++ b/electrum/gui/qml/components/ReceiveDialog.qml @@ -32,6 +32,7 @@ ElDialog { padding: 0 ColumnLayout { + visible: !_ispaid anchors.fill: parent spacing: 0 @@ -50,7 +51,6 @@ ElDialog { id: rootLayout width: parent.width spacing: constants.paddingMedium - visible: !_ispaid states: [ State { @@ -361,7 +361,6 @@ ElDialog { RequestDetails { id: request wallet: Daemon.currentWallet - key: dialog.key onDetailsChanged: { if (bolt11) { rootLayout.state = 'bolt11' diff --git a/electrum/gui/qml/qerequestdetails.py b/electrum/gui/qml/qerequestdetails.py index 7c11375a8..5326aceae 100644 --- a/electrum/gui/qml/qerequestdetails.py +++ b/electrum/gui/qml/qerequestdetails.py @@ -8,8 +8,9 @@ from electrum.invoices import (PR_UNPAID, PR_EXPIRED, PR_UNKNOWN, PR_PAID, PR_IN from .qewallet import QEWallet from .qetypes import QEAmount +from .util import QtEventListener, event_listener -class QERequestDetails(QObject): +class QERequestDetails(QObject, QtEventListener): class Status: Unpaid = PR_UNPAID @@ -32,17 +33,25 @@ class QERequestDetails(QObject): _amount = None detailsChanged = pyqtSignal() # generic request properties changed signal + statusChanged = pyqtSignal() def __init__(self, parent=None): super().__init__(parent) + self.register_callbacks() + self.destroyed.connect(lambda: self.on_destroy()) - def __del__(self): - if self._wallet: - self._wallet.requestStatusChanged.disconnect(self.updateRequestStatus) + def on_destroy(self): + self.unregister_callbacks() if self._timer: self._timer.stop() self._timer = None + @event_listener + def on_event_request_status(self, wallet, key, status): + if wallet == self._wallet.wallet and key == self._key: + self._logger.debug('request status %d for key %s' % (status, key)) + self.statusChanged.emit() + walletChanged = pyqtSignal() @pyqtProperty(QEWallet, notify=walletChanged) def wallet(self): @@ -51,13 +60,8 @@ class QERequestDetails(QObject): @wallet.setter def wallet(self, wallet: QEWallet): if self._wallet != wallet: - if self._wallet: - self._wallet.requestStatusChanged.disconnect(self.updateRequestStatus) self._wallet = wallet self.walletChanged.emit() - - wallet.requestStatusChanged.connect(self.updateRequestStatus) - self.initRequest() keyChanged = pyqtSignal() @@ -116,13 +120,6 @@ class QERequestDetails(QObject): return self._req.get_bip21_URI() if self._req else '' - @pyqtSlot(str, int) - def updateRequestStatus(self, key, status): - if key == self._key: - self._logger.debug(f'request with key {key} updated status ({status})') - self.statusChanged.emit() - - def initRequest(self): if self._wallet is None or self._key is None: return