From d7bc505973faeeef98cf360f210fa5f9c59c24da Mon Sep 17 00:00:00 2001 From: ThomasV Date: Fri, 19 Feb 2016 10:52:09 +0100 Subject: [PATCH] kivy: don't load kv from sign_transaction thread --- gui/kivy/main_window.py | 12 ++++++++++++ gui/kivy/uix/screens.py | 25 ++++++++++--------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py index a608c60f..9b1f9087 100644 --- a/gui/kivy/main_window.py +++ b/gui/kivy/main_window.py @@ -681,6 +681,18 @@ class ElectrumWindow(App): d = TxDialog(self, tx) d.open() + def sign_tx(self, *args): + import threading + threading.Thread(target=self._sign_tx, args=args).start() + + def _sign_tx(self, tx, password, on_success, on_failure): + try: + self.wallet.sign_transaction(tx, password) + except InvalidPassword: + Clock.schedule_once(lambda dt: on_failure(_("Invalid PIN"))) + return + Clock.schedule_once(lambda dt: on_success(tx)) + def broadcast(self, tx): if self.network and self.network.is_connected(): self.show_info(_('Sending')) diff --git a/gui/kivy/uix/screens.py b/gui/kivy/uix/screens.py index 619f7c67..5c5da65b 100644 --- a/gui/kivy/uix/screens.py +++ b/gui/kivy/uix/screens.py @@ -3,7 +3,6 @@ from decimal import Decimal import re import datetime import traceback, sys -import threading from kivy.app import App from kivy.cache import Cache @@ -285,23 +284,19 @@ class SendScreen(CScreen): msg.append(_("Enter your PIN code to proceed")) self.app.protected('\n'.join(msg), self.send_tx, (tx,)) - def send_tx(self, *args): - threading.Thread(target=self.send_tx_thread, args=args).start() - - def send_tx_thread(self, tx, password): - # sign transaction + def send_tx(self, tx, password): + def on_success(tx): + if tx.is_complete(): + self.app.broadcast(tx) + else: + self.app.tx_dialog(tx) + def on_failure(error): + self.app.show_error(error) if self.app.wallet.can_sign(tx): self.app.show_info("Signing...") - try: - self.app.wallet.sign_transaction(tx, password) - except InvalidPassword: - self.app.show_error(_("Invalid PIN")) - return - if not tx.is_complete(): + self.app.sign_tx(tx, password, on_success, on_failure) + else: self.app.tx_dialog(tx) - return - # broadcast - self.app.broadcast(tx) class ReceiveScreen(CScreen):