Fix top level window issue on Mac
Better, more generic fix superseding prior two patches.
This commit is contained in:
parent
56bc717da1
commit
83cc5e2001
|
@ -64,7 +64,7 @@ class OpenFileEventFilter(QObject):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ElectrumGui(MessageBoxMixin):
|
class ElectrumGui:
|
||||||
|
|
||||||
def __init__(self, config, network, daemon, plugins):
|
def __init__(self, config, network, daemon, plugins):
|
||||||
set_language(config.get('language'))
|
set_language(config.get('language'))
|
||||||
|
|
|
@ -183,13 +183,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
||||||
return "%s/%s" % (PrintError.diagnostic_name(self),
|
return "%s/%s" % (PrintError.diagnostic_name(self),
|
||||||
self.wallet.basename() if self.wallet else "None")
|
self.wallet.basename() if self.wallet else "None")
|
||||||
|
|
||||||
def top_level_window(self, window=None):
|
|
||||||
window = window or self
|
|
||||||
for n, child in enumerate(window.children()):
|
|
||||||
if isinstance(child, WindowModalDialog):
|
|
||||||
return self.top_level_window(child)
|
|
||||||
return window
|
|
||||||
|
|
||||||
def is_hidden(self):
|
def is_hidden(self):
|
||||||
return self.isMinimized() or self.isHidden()
|
return self.isMinimized() or self.isHidden()
|
||||||
|
|
||||||
|
@ -2085,11 +2078,10 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
||||||
verified = bitcoin.verify_message(address.text(), sig, message)
|
verified = bitcoin.verify_message(address.text(), sig, message)
|
||||||
except:
|
except:
|
||||||
verified = False
|
verified = False
|
||||||
dialog = self.top_level_window()
|
|
||||||
if verified:
|
if verified:
|
||||||
dialog.show_message(_("Signature verified"))
|
self.show_message(_("Signature verified"))
|
||||||
else:
|
else:
|
||||||
dialog.show_error(_("Wrong signature"))
|
self.show_error(_("Wrong signature"))
|
||||||
|
|
||||||
|
|
||||||
def sign_verify_message(self, address=''):
|
def sign_verify_message(self, address=''):
|
||||||
|
@ -2137,7 +2129,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
||||||
message_e.setText(decrypted)
|
message_e.setText(decrypted)
|
||||||
except BaseException as e:
|
except BaseException as e:
|
||||||
traceback.print_exc(file=sys.stdout)
|
traceback.print_exc(file=sys.stdout)
|
||||||
self.top_level_window().show_warning(str(e))
|
self.show_warning(str(e))
|
||||||
|
|
||||||
|
|
||||||
def do_encrypt(self, message_e, pubkey_e, encrypted_e):
|
def do_encrypt(self, message_e, pubkey_e, encrypted_e):
|
||||||
|
@ -2148,7 +2140,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
|
||||||
encrypted_e.setText(encrypted)
|
encrypted_e.setText(encrypted)
|
||||||
except BaseException as e:
|
except BaseException as e:
|
||||||
traceback.print_exc(file=sys.stdout)
|
traceback.print_exc(file=sys.stdout)
|
||||||
self.top_level_window().show_warning(str(e))
|
self.show_warning(str(e))
|
||||||
|
|
||||||
|
|
||||||
def encrypt_message(self, address = ''):
|
def encrypt_message(self, address = ''):
|
||||||
|
|
|
@ -156,34 +156,38 @@ class CancelButton(QPushButton):
|
||||||
self.clicked.connect(dialog.reject)
|
self.clicked.connect(dialog.reject)
|
||||||
|
|
||||||
class MessageBoxMixin(object):
|
class MessageBoxMixin(object):
|
||||||
|
def top_level_window(self, window=None):
|
||||||
|
window = window or self
|
||||||
|
for n, child in enumerate(window.children()):
|
||||||
|
if isinstance(child, WindowModalDialog):
|
||||||
|
return self.top_level_window(child)
|
||||||
|
return window
|
||||||
|
|
||||||
def question(self, msg, parent=None, title=None, icon=None):
|
def question(self, msg, parent=None, title=None, icon=None):
|
||||||
Yes, No = QMessageBox.Yes, QMessageBox.No
|
Yes, No = QMessageBox.Yes, QMessageBox.No
|
||||||
return self.msg_box(icon or QMessageBox.Question,
|
return self.msg_box(icon or QMessageBox.Question,
|
||||||
parent or self, title or '',
|
parent, title or '',
|
||||||
msg, buttons=Yes|No, defaultButton=No) == Yes
|
msg, buttons=Yes|No, defaultButton=No) == Yes
|
||||||
|
|
||||||
def show_warning(self, msg, parent=None, title=None):
|
def show_warning(self, msg, parent=None, title=None):
|
||||||
return self.msg_box(QMessageBox.Warning, parent or self,
|
return self.msg_box(QMessageBox.Warning, parent,
|
||||||
title or _('Warning'), msg)
|
title or _('Warning'), msg)
|
||||||
|
|
||||||
def show_error(self, msg, parent=None):
|
def show_error(self, msg, parent=None):
|
||||||
return self.msg_box(QMessageBox.Warning, parent or self,
|
return self.msg_box(QMessageBox.Warning, parent,
|
||||||
_('Error'), msg)
|
_('Error'), msg)
|
||||||
|
|
||||||
def show_critical(self, msg, parent=None, title=None):
|
def show_critical(self, msg, parent=None, title=None):
|
||||||
return self.msg_box(QMessageBox.Critical, parent or self,
|
return self.msg_box(QMessageBox.Critical, parent,
|
||||||
title or _('Critical Error'), msg)
|
title or _('Critical Error'), msg)
|
||||||
|
|
||||||
def show_message(self, msg, parent=None, title=None):
|
def show_message(self, msg, parent=None, title=None):
|
||||||
return self.msg_box(QMessageBox.Information, parent or self,
|
return self.msg_box(QMessageBox.Information, parent,
|
||||||
title or _('Information'), msg)
|
title or _('Information'), msg)
|
||||||
|
|
||||||
@staticmethod
|
def msg_box(self, icon, parent, title, text, buttons=QMessageBox.Ok,
|
||||||
def msg_box(icon, parent, title, text, buttons=QMessageBox.Ok,
|
|
||||||
defaultButton=QMessageBox.NoButton):
|
defaultButton=QMessageBox.NoButton):
|
||||||
# handle e.g. ElectrumGui
|
parent = parent or self.top_level_window()
|
||||||
if not isinstance(parent, QWidget):
|
|
||||||
parent = None
|
|
||||||
d = QMessageBox(icon, title, text, buttons, parent)
|
d = QMessageBox(icon, title, text, buttons, parent)
|
||||||
d.setWindowModality(Qt.WindowModal)
|
d.setWindowModality(Qt.WindowModal)
|
||||||
d.setDefaultButton(defaultButton)
|
d.setDefaultButton(defaultButton)
|
||||||
|
|
Loading…
Reference in New Issue