diff --git a/icons.qrc b/icons.qrc
index 7caa8836f..2f2f62d11 100644
--- a/icons.qrc
+++ b/icons.qrc
@@ -15,6 +15,7 @@
icons/file.png
icons/hot_seed.png
icons/keepkey.png
+ icons/keepkey_unpaired.png
icons/key.png
icons/lock.png
icons/microphone.png
@@ -28,6 +29,7 @@
icons/status_lagging.png
icons/seal.png
icons/speaker.png
+ icons/trezor_unpaired.png
icons/trezor.png
icons/trustedcoin.png
icons/unconfirmed.png
diff --git a/icons/keepkey.png b/icons/keepkey.png
index 9867bddc9..76877bbd9 100644
Binary files a/icons/keepkey.png and b/icons/keepkey.png differ
diff --git a/icons/keepkey_unpaired.png b/icons/keepkey_unpaired.png
new file mode 100644
index 000000000..790e6587b
Binary files /dev/null and b/icons/keepkey_unpaired.png differ
diff --git a/icons/trezor_unpaired.png b/icons/trezor_unpaired.png
new file mode 100644
index 000000000..8d29638e9
Binary files /dev/null and b/icons/trezor_unpaired.png differ
diff --git a/lib/plugins.py b/lib/plugins.py
index f6fbe18f8..b7fc62a7e 100644
--- a/lib/plugins.py
+++ b/lib/plugins.py
@@ -385,6 +385,7 @@ class DeviceMgr(ThreadJob, PrintError):
def client_for_keystore(self, plugin, handler, keystore, force_pair):
with self.lock:
+ plugin.update_status(handler, False)
devices = self.scan_devices()
xpub = keystore.xpub
derivation = keystore.get_derivation()
@@ -392,6 +393,8 @@ class DeviceMgr(ThreadJob, PrintError):
if client is None and force_pair:
info = self.select_device(plugin, handler, keystore, devices)
client = self.force_pair_xpub(plugin, handler, info, xpub, derivation, devices)
+ if client:
+ plugin.update_status(handler, True)
return client
def client_by_xpub(self, plugin, xpub, handler, devices):
diff --git a/plugins/keepkey/qt.py b/plugins/keepkey/qt.py
index 69e2fbcfd..9bdc4695c 100644
--- a/plugins/keepkey/qt.py
+++ b/plugins/keepkey/qt.py
@@ -3,7 +3,8 @@ from keepkey import KeepKeyPlugin
class Plugin(qt_plugin_class(KeepKeyPlugin)):
- icon_file = ":icons/keepkey.png"
+ icon_paired = ":icons/keepkey.png"
+ icon_unpaired = ":icons/keepkey_unpaired.png"
@classmethod
def pin_matrix_widget_class(self):
diff --git a/plugins/trezor/plugin.py b/plugins/trezor/plugin.py
index 6aad39663..a4696667e 100644
--- a/plugins/trezor/plugin.py
+++ b/plugins/trezor/plugin.py
@@ -353,7 +353,3 @@ class TrezorCompatiblePlugin(HW_PluginBase):
def get_tx(self, tx_hash):
tx = self.prev_tx[tx_hash]
return self.electrum_tx_to_txtype(tx)
-
- @staticmethod
- def is_valid_seed(seed):
- return True
diff --git a/plugins/trezor/qt.py b/plugins/trezor/qt.py
index 1f418f6ea..473a25715 100644
--- a/plugins/trezor/qt.py
+++ b/plugins/trezor/qt.py
@@ -3,7 +3,8 @@ from trezor import TrezorPlugin
class Plugin(qt_plugin_class(TrezorPlugin)):
- icon_file = ":icons/trezor.png"
+ icon_unpaired = ":icons/trezor_unpaired.png"
+ icon_paired = ":icons/trezor.png"
@classmethod
def pin_matrix_widget_class(self):
diff --git a/plugins/trezor/qt_generic.py b/plugins/trezor/qt_generic.py
index 873b8969d..5efc07c14 100644
--- a/plugins/trezor/qt_generic.py
+++ b/plugins/trezor/qt_generic.py
@@ -193,15 +193,26 @@ def qt_plugin_class(base_plugin_class):
for keystore in wallet.get_keystores():
if type(keystore) != self.keystore_class:
continue
- tooltip = self.device + ' ' + keystore.label
- button = StatusBarButton(QIcon(self.icon_file), tooltip,
+ tooltip = self.device + ' ' + (keystore.label or '')
+ button = StatusBarButton(QIcon(self.icon_unpaired), tooltip,
partial(self.settings_dialog, window, keystore))
window.statusBar().addPermanentWidget(button)
- keystore.handler = self.create_handler(window)
+ handler = self.create_handler(window)
+ handler.button = button
+ keystore.handler = handler
keystore.thread = TaskThread(window, window.on_error)
# Trigger a pairing
keystore.thread.add(partial(self.get_client, keystore))
+ window.connect(window, SIGNAL('keystore_status'), self._update_status)
+
+ def update_status(self, handler, paired):
+ handler.win.emit(SIGNAL('keystore_status'), handler, paired)
+
+ def _update_status(self, handler, paired):
+ icon = self.icon_paired if paired else self.icon_unpaired
+ handler.button.setIcon(QIcon(icon))
+
@hook
def receive_menu(self, menu, addrs, wallet):
if type(wallet) is not Standard_Wallet:
@@ -222,7 +233,10 @@ def qt_plugin_class(base_plugin_class):
forgotten their PIN or it is in bootloader mode.'''
device_id = self.device_manager().xpub_id(keystore.xpub)
if not device_id:
- info = self.device_manager().select_device(keystore.handler, self, keystore)
+ try:
+ info = self.device_manager().select_device(self, keystore.handler, keystore)
+ except UserCancelled:
+ return
device_id = info.device.id_
return device_id