tqt: consistently show tooltip when copying to clipboard - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 1526bc9ccf1125cd2c8c650748116050da95d778 DIR parent 9fe79171186e9e98aab266282c055a90dac9de18 HTML Author: SomberNight <somber.night@protonmail.com> Date: Thu, 21 Nov 2019 03:01:55 +0100 qt: consistently show tooltip when copying to clipboard Diffstat: M electrum/gui/qt/address_list.py | 4 ++-- M electrum/gui/qt/contact_list.py | 2 +- M electrum/gui/qt/history_list.py | 6 ++++-- M electrum/gui/qt/main_window.py | 10 +++++++--- M electrum/gui/qt/request_list.py | 6 +++--- M electrum/gui/qt/transaction_dialog… | 2 +- M electrum/gui/qt/util.py | 8 +++++--- 7 files changed, 23 insertions(+), 15 deletions(-) --- DIR diff --git a/electrum/gui/qt/address_list.py b/electrum/gui/qt/address_list.py t@@ -251,11 +251,11 @@ class AddressList(MyTreeView): run_hook('receive_menu', menu, addrs, self.wallet) menu.exec_(self.viewport().mapToGlobal(position)) - def place_text_on_clipboard(self, text): + def place_text_on_clipboard(self, text: str, *, title: str = None) -> None: if is_address(text): try: self.wallet.check_address(text) except InternalAddressCorruption as e: self.parent.show_error(str(e)) raise - self.parent.app.clipboard().setText(text) + super().place_text_on_clipboard(text, title=title) DIR diff --git a/electrum/gui/qt/contact_list.py b/electrum/gui/qt/contact_list.py t@@ -85,7 +85,7 @@ class ContactList(MyTreeView): column_title = self.model().horizontalHeaderItem(column).text() column_data = '\n'.join(self.model().itemFromIndex(s_idx).text() for s_idx in self.selected_in_column(column)) - menu.addAction(_("Copy {}").format(column_title), lambda: self.parent.app.clipboard().setText(column_data)) + menu.addAction(_("Copy {}").format(column_title), lambda: self.place_text_on_clipboard(column_data, title=column_title)) if column in self.editable_columns: item = self.model().itemFromIndex(idx) if item.isEditable(): DIR diff --git a/electrum/gui/qt/history_list.py b/electrum/gui/qt/history_list.py t@@ -597,7 +597,9 @@ class HistoryList(MyTreeView, AcceptFileDragDrop): column_title = self.hm.headerData(column, Qt.Horizontal, Qt.DisplayRole) idx2 = idx.sibling(idx.row(), column) column_data = (self.hm.data(idx2, Qt.DisplayRole).value() or '').strip() - cc.addAction(column_title, lambda t=column_data: self.parent.app.clipboard().setText(t)) + cc.addAction(column_title, + lambda text=column_data, title=column_title: + self.place_text_on_clipboard(text, title=title)) def create_menu(self, position: QPoint): org_idx: QModelIndex = self.indexAt(position) t@@ -620,7 +622,7 @@ class HistoryList(MyTreeView, AcceptFileDragDrop): menu = QMenu() if height in [TX_HEIGHT_FUTURE, TX_HEIGHT_LOCAL]: menu.addAction(_("Remove"), lambda: self.remove_local_tx(tx_hash)) - menu.addAction(_("Copy Transaction ID"), lambda: self.parent.app.clipboard().setText(tx_hash)) + menu.addAction(_("Copy Transaction ID"), lambda: self.place_text_on_clipboard(tx_hash, title="TXID")) self.add_copy_menu(menu, idx) for c in self.editable_columns: if self.isColumnHidden(c): continue DIR diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py t@@ -45,7 +45,7 @@ from PyQt5.QtWidgets import (QMessageBox, QComboBox, QSystemTrayIcon, QTabWidget QVBoxLayout, QGridLayout, QLineEdit, QHBoxLayout, QPushButton, QScrollArea, QTextEdit, QShortcut, QMainWindow, QCompleter, QInputDialog, - QWidget, QSizePolicy, QStatusBar) + QWidget, QSizePolicy, QStatusBar, QToolTip) import electrum from electrum import (keystore, ecc, constants, util, bitcoin, commands, t@@ -1115,9 +1115,13 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): self.sign_payment_request(addr) return addr - def do_copy(self, title, content): + def do_copy(self, content: str, *, title: str = None) -> None: self.app.clipboard().setText(content) - self.show_message(_(f"{title} copied to clipboard:\n\n{content}")) + if title is None: + tooltip_text = _("Text copied to clipboard").format(title) + else: + tooltip_text = _("{} copied to clipboard").format(title) + QToolTip.showText(QCursor.pos(), tooltip_text, self) def export_payment_request(self, addr): r = self.wallet.receive_requests.get(addr) DIR diff --git a/electrum/gui/qt/request_list.py b/electrum/gui/qt/request_list.py t@@ -161,10 +161,10 @@ class RequestList(MyTreeView): menu = QMenu(self) self.add_copy_menu(menu, idx) if request_type == PR_TYPE_LN: - menu.addAction(_("Copy Request"), lambda: self.parent.do_copy('Lightning Request', req['invoice'])) + menu.addAction(_("Copy Request"), lambda: self.parent.do_copy(req['invoice'], title='Lightning Request')) else: - menu.addAction(_("Copy Request"), lambda: self.parent.do_copy('Bitcoin URI', req['URI'])) - menu.addAction(_("Copy Address"), lambda: self.parent.do_copy('Bitcoin Address', req['address'])) + menu.addAction(_("Copy Request"), lambda: self.parent.do_copy(req['URI'], title='Bitcoin URI')) + menu.addAction(_("Copy Address"), lambda: self.parent.do_copy(req['address'], title='Bitcoin Address')) if 'view_url' in req: menu.addAction(_("View in web browser"), lambda: webopen(req['view_url'])) menu.addAction(_("Delete"), lambda: self.parent.delete_request(key)) DIR diff --git a/electrum/gui/qt/transaction_dialog.py b/electrum/gui/qt/transaction_dialog.py t@@ -261,7 +261,7 @@ class BaseTxDialog(QDialog, MessageBoxMixin): def copy_to_clipboard(self, *, tx: Transaction = None): if tx is None: tx = self.tx - self.main_window.app.clipboard().setText(str(tx)) + self.main_window.do_copy(str(tx), title=_("Transaction")) def show_qr(self, *, tx: Transaction = None): if tx is None: DIR diff --git a/electrum/gui/qt/util.py b/electrum/gui/qt/util.py t@@ -634,10 +634,12 @@ class MyTreeView(QTreeView): column_title = self.model().horizontalHeaderItem(column).text() item_col = self.model().itemFromIndex(idx.sibling(idx.row(), column)) column_data = item_col.text().strip() - cc.addAction(column_title, lambda t=column_data: self.place_text_on_clipboard(t)) + cc.addAction(column_title, + lambda text=column_data, title=column_title: + self.place_text_on_clipboard(text, title=title)) - def place_text_on_clipboard(self, text): - self.parent.app.clipboard().setText(text) + def place_text_on_clipboard(self, text: str, *, title: str = None) -> None: + self.parent.do_copy(text, title=title) class ButtonsWidget(QWidget):