From 11439fb3fdeb96959dbbe8a5a15d33e1dd0743af Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Thu, 9 Feb 2023 01:34:54 +0100 Subject: [PATCH] qml: don't stack exception dialogs when multiple exceptions happen --- electrum/gui/qml/components/main.qml | 14 ++++++++++---- electrum/gui/qml/qeapp.py | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/electrum/gui/qml/components/main.qml b/electrum/gui/qml/components/main.qml index 7957d381b..d39d8b3eb 100644 --- a/electrum/gui/qml/components/main.qml +++ b/electrum/gui/qml/components/main.qml @@ -32,6 +32,7 @@ ApplicationWindow property variant activeDialogs: [] property bool _wantClose: false + property var _exceptionDialog header: ToolBar { id: toolbar @@ -364,11 +365,16 @@ ApplicationWindow function onUserNotify(wallet_name, message) { notificationPopup.show(wallet_name, message) } - function onShowException() { - var dialog = crashDialog.createObject(app, { - crashData: AppController.crashData() + function onShowException(crash_data) { + if (app._exceptionDialog) + return + app._exceptionDialog = crashDialog.createObject(app, { + crashData: crash_data }) - dialog.open() + app._exceptionDialog.onClosed.connect(function() { + app._exceptionDialog = null + }) + app._exceptionDialog.open() } } diff --git a/electrum/gui/qml/qeapp.py b/electrum/gui/qml/qeapp.py index ae6af94c7..b3fd7636e 100644 --- a/electrum/gui/qml/qeapp.py +++ b/electrum/gui/qml/qeapp.py @@ -51,7 +51,7 @@ class QEAppController(BaseCrashReporter, QObject): _dummy = pyqtSignal() userNotify = pyqtSignal(str, str) uriReceived = pyqtSignal(str) - showException = pyqtSignal() + showException = pyqtSignal('QVariantMap') sendingBugreport = pyqtSignal() sendingBugreportSuccess = pyqtSignal(str) sendingBugreportFailure = pyqtSignal(str) @@ -223,7 +223,7 @@ class QEAppController(BaseCrashReporter, QObject): @pyqtSlot(object,object,object,object) def crash(self, config, e, text, tb): self.exc_args = (e, text, tb) # for BaseCrashReporter - self.showException.emit() + self.showException.emit(self.crashData()) @pyqtSlot() def sendReport(self):