From 2bcb02d6099b68537816020f0462a5c6773976ac Mon Sep 17 00:00:00 2001 From: SomberNight <somber.night@protonmail.com> Date: Mon, 25 Dec 2017 16:51:07 +0100 Subject: [PATCH] fix some crashes when the underlying QT (C/C++) object no longer exists --- gui/qt/main_window.py | 17 +++++++++++++++-- gui/qt/util.py | 14 +++++++++----- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py index 26ccf6aba..e55788b7b 100644 --- a/gui/qt/main_window.py +++ b/gui/qt/main_window.py @@ -2030,7 +2030,12 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): task = partial(self.wallet.sign_message, address, message, password) def show_signed_message(sig): - signature.setText(base64.b64encode(sig).decode('ascii')) + try: + signature.setText(base64.b64encode(sig).decode('ascii')) + except RuntimeError: + # (signature) wrapped C/C++ object has been deleted + pass + self.wallet.thread.add(task, on_success=show_signed_message) def do_verify(self, address, message, signature): @@ -2091,7 +2096,15 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): def do_decrypt(self, message_e, pubkey_e, encrypted_e, password): cyphertext = encrypted_e.toPlainText() task = partial(self.wallet.decrypt_message, pubkey_e.text(), cyphertext, password) - self.wallet.thread.add(task, on_success=lambda text: message_e.setText(text.decode('utf-8'))) + + def setText(text): + try: + message_e.setText(text.decode('utf-8')) + except RuntimeError: + # (message_e) wrapped C/C++ object has been deleted + pass + + self.wallet.thread.add(task, on_success=setText) def do_encrypt(self, message_e, pubkey_e, encrypted_e): message = message_e.toPlainText() diff --git a/gui/qt/util.py b/gui/qt/util.py index f1f2d0bd2..082ea5967 100644 --- a/gui/qt/util.py +++ b/gui/qt/util.py @@ -406,11 +406,15 @@ class MyTreeWidget(QTreeWidget): def editItem(self, item, column): if column in self.editable_columns: - self.editing_itemcol = (item, column, item.text(column)) - # Calling setFlags causes on_changed events for some reason - item.setFlags(item.flags() | Qt.ItemIsEditable) - QTreeWidget.editItem(self, item, column) - item.setFlags(item.flags() & ~Qt.ItemIsEditable) + try: + self.editing_itemcol = (item, column, item.text(column)) + # Calling setFlags causes on_changed events for some reason + item.setFlags(item.flags() | Qt.ItemIsEditable) + QTreeWidget.editItem(self, item, column) + item.setFlags(item.flags() & ~Qt.ItemIsEditable) + except RuntimeError: + # (item) wrapped C/C++ object has been deleted + pass def keyPressEvent(self, event): if event.key() in [ Qt.Key_F2, Qt.Key_Return ] and self.editor is None: