diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py index 7d415ecaa..1e4fb2c70 100644 --- a/electrum/gui/qt/main_window.py +++ b/electrum/gui/qt/main_window.py @@ -203,7 +203,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): self.showing_cert_mismatch_error = False self.tl_windows = [] self.pending_invoice = None - self.current_request = None # request shown in the receive tab Logger.__init__(self) self._coroutines_scheduled = {} # type: Dict[concurrent.futures.Future, str] @@ -1328,12 +1327,9 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): return w - def set_current_request(self, req): - self.current_request = req - self.update_current_request() - def update_current_request(self): - req = self.current_request + key = self.request_list.get_current_key() + req = self.wallet.get_request(key) if key else None if req is None: self.receive_URI_e.setText('') self.receive_lightning_e.setText('') @@ -1471,7 +1467,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): assert key is not None self.address_list.refresh_all() self.request_list.update() - self.request_list.select_key(key) + self.request_list.set_current_key(key) # clear request fields self.receive_amount_e.setText('') self.receive_message_e.setText('') @@ -3788,4 +3784,4 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): amount_msat = amount_e.get_amount() * 1000 coro = self.wallet.lnworker.rebalance_channels(d.chan_from, d.chan_to, amount_msat=amount_msat) self.run_coroutine_from_thread(coro, _('Rebalancing channels')) - self.update_current_request() + self.update_current_request() # this will gray out the button diff --git a/electrum/gui/qt/request_list.py b/electrum/gui/qt/request_list.py index e25cb63d5..25c020bd9 100644 --- a/electrum/gui/qt/request_list.py +++ b/electrum/gui/qt/request_list.py @@ -75,7 +75,7 @@ class RequestList(MyTreeView): self.selectionModel().currentRowChanged.connect(self.item_changed) self.setSelectionMode(QAbstractItemView.ExtendedSelection) - def select_key(self, key): + def set_current_key(self, key): for i in range(self.model().rowCount()): item = self.model().index(i, self.Columns.DATE) row_key = item.data(ROLE_KEY) @@ -83,9 +83,12 @@ class RequestList(MyTreeView): self.selectionModel().setCurrentIndex(item, QItemSelectionModel.SelectCurrent | QItemSelectionModel.Rows) break + def get_current_key(self): + return self.get_role_data_for_current_item(col=self.Columns.DATE, role=ROLE_KEY) + def item_changed(self, idx: Optional[QModelIndex]): if idx is None: - self.parent.set_current_request(None) + self.parent.update_current_request() return if not idx.isValid(): return @@ -95,8 +98,7 @@ class RequestList(MyTreeView): req = self.wallet.get_request(key) if req is None: self.update() - return - self.parent.set_current_request(req) + self.parent.update_current_request() def clearSelection(self): super().clearSelection() @@ -114,6 +116,7 @@ class RequestList(MyTreeView): status_item.setIcon(read_QIcon(pr_icons.get(status))) def update(self): + current_key = self.get_current_key() # not calling maybe_defer_update() as it interferes with conditional-visibility self.proxy.setDynamicSortFilter(False) # temp. disable re-sorting after every change self.std_model.clear() @@ -140,6 +143,8 @@ class RequestList(MyTreeView): # sort requests by date self.sortByColumn(self.Columns.DATE, Qt.DescendingOrder) self.hide_if_empty() + if current_key is not None: + self.set_current_key(current_key) def hide_if_empty(self): b = self.std_model.rowCount() > 0