tfix #4240 - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 985fe24f1809adc1b4417a2c4f0ba7159d56249b DIR parent a03449c1be97eda1c4f6e32195417c6658321171 HTML Author: SomberNight <somber.night@protonmail.com> Date: Sun, 8 Apr 2018 15:13:12 +0200 fix #4240 Diffstat: M gui/qt/main_window.py | 8 +++++--- M gui/qt/util.py | 16 ++++++++++------ 2 files changed, 15 insertions(+), 9 deletions(-) --- DIR diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py t@@ -254,10 +254,12 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): def pop_top_level_window(self, window): self.tl_windows.remove(window) - def top_level_window(self): + def top_level_window(self, test_func=None): '''Do the right thing in the presence of tx dialog windows''' override = self.tl_windows[-1] if self.tl_windows else None - return self.top_level_window_recurse(override) + if override and test_func and not test_func(override): + override = None # only override if ok for test_func + return self.top_level_window_recurse(override, test_func) def diagnostic_name(self): return "%s/%s" % (PrintError.diagnostic_name(self), t@@ -1613,7 +1615,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): return status, msg # Capture current TL window; override might be removed on return - parent = self.top_level_window() + parent = self.top_level_window(lambda win: isinstance(win, MessageBoxMixin)) def broadcast_done(result): # GUI thread DIR diff --git a/gui/qt/util.py b/gui/qt/util.py t@@ -165,17 +165,21 @@ class CancelButton(QPushButton): self.clicked.connect(dialog.reject) class MessageBoxMixin(object): - def top_level_window_recurse(self, window=None): + def top_level_window_recurse(self, window=None, test_func=None): window = window or self classes = (WindowModalDialog, QMessageBox) + if test_func is None: + test_func = lambda x: True for n, child in enumerate(window.children()): - # Test for visibility as old closed dialogs may not be GC-ed - if isinstance(child, classes) and child.isVisible(): - return self.top_level_window_recurse(child) + # Test for visibility as old closed dialogs may not be GC-ed. + # Only accept children that confirm to test_func. + if isinstance(child, classes) and child.isVisible() \ + and test_func(child): + return self.top_level_window_recurse(child, test_func=test_func) return window - def top_level_window(self): - return self.top_level_window_recurse() + def top_level_window(self, test_func=None): + return self.top_level_window_recurse(test_func) def question(self, msg, parent=None, title=None, icon=None): Yes, No = QMessageBox.Yes, QMessageBox.No