From 292ce359452b583e57a051499ef26408b8010119 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Sat, 11 Feb 2023 12:52:42 +0100 Subject: [PATCH] receive tab: copy to clipboard when tab is changed --- electrum/gui/qt/receive_tab.py | 36 ++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/electrum/gui/qt/receive_tab.py b/electrum/gui/qt/receive_tab.py index 37d28d54f..dfe3da7fb 100644 --- a/electrum/gui/qt/receive_tab.py +++ b/electrum/gui/qt/receive_tab.py @@ -161,9 +161,8 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger): self.receive_tabs.addTab(self.receive_URI_widget, read_QIcon("link.png"), _('URI')) self.receive_tabs.addTab(self.receive_address_widget, read_QIcon("bitcoin.png"), _('Address')) self.receive_tabs.addTab(self.receive_lightning_widget, read_QIcon("lightning.png"), _('Lightning')) - self.receive_tabs.currentChanged.connect(self.update_receive_qr_window) self.receive_tabs.setCurrentIndex(self.config.get('receive_tabs_index', 0)) - self.receive_tabs.currentChanged.connect(lambda i: self.config.set_key('receive_tabs_index', i)) + self.receive_tabs.currentChanged.connect(self.on_tab_changed) receive_tabs_sp = QSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.MinimumExpanding) receive_tabs_sp.setRetainSizeWhenHidden(True) self.receive_tabs.setSizePolicy(receive_tabs_sp) @@ -195,6 +194,12 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger): vbox.setStretchFactor(self.request_list, 60) self.request_list.update() # after parented and put into a layout, can update without flickering + def on_tab_changed(self, i): + self.config.set_key('receive_tabs_index', i) + title, data = self.get_tab_data(i) + self.window.do_copy(data, title=title) + self.update_receive_qr_window() + def toggle_receive_qr(self, e): if e.button() != Qt.LeftButton: return @@ -236,7 +241,6 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger): self.receive_tabs.setTabIcon(2, read_QIcon(icon_name)) # encode lightning invoices as uppercase so QR encoding can use # alphanumeric mode; resulting in smaller QR codes - lnaddr_qr = lnaddr.upper() self.receive_address_e.setText(addr) self.receive_address_qr.setData(addr) self.receive_address_help_text.setText(address_help) @@ -245,7 +249,7 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger): self.receive_URI_help.setText(URI_help) self.receive_lightning_e.setText(lnaddr) # TODO maybe prepend "lightning:" ?? self.receive_lightning_help_text.setText(ln_help) - self.receive_lightning_qr.setData(lnaddr_qr) + self.receive_lightning_qr.setData(lnaddr.upper()) self.update_textedit_warning(text_e=self.receive_address_e, warning_text=address_help) self.update_textedit_warning(text_e=self.receive_URI_e, warning_text=URI_help) self.update_textedit_warning(text_e=self.receive_lightning_e, warning_text=ln_help) @@ -257,15 +261,20 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger): self.receive_tabs.setVisible(True) self.update_receive_qr_window() + def get_tab_data(self, i): + if i == 0: + return _('Bitcoin URI'), self.receive_URI_e.text() + elif i == 1: + return _('Address'), self.receive_address_e.text() + else: + return _('Lightning Request'), self.receive_lightning_e.text() + def update_receive_qr_window(self): if self.window.qr_window and self.window.qr_window.isVisible(): i = self.receive_tabs.currentIndex() - if i == 0: - data = self.receive_URI_qr.data - elif i == 1: - data = self.receive_address_qr.data - else: - data = self.receive_lightning_qr.data + title, data = self.get_tab_data(i) + if i == 2: + data = data.upper() self.window.qr_window.qrw.setData(data) def create_invoice(self): @@ -301,11 +310,8 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger): # clear request fields self.receive_amount_e.setText('') self.receive_message_e.setText('') - # copy to clipboard - r = self.wallet.get_request(key) - content = r.lightning_invoice if r.is_lightning() else r.get_address() - title = _('Invoice') if r.is_lightning() else _('Address') - self.window.do_copy(content, title=title) + # copy current tab to clipboard + self.on_tab_changed(self.receive_tabs.currentIndex()) def get_bitcoin_address_for_request(self, amount) -> Optional[str]: addr = self.wallet.get_unused_address()