aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorselsta <selsta@sent.at>2026-01-20 20:53:20 +0100
committerselsta <selsta@sent.at>2026-01-20 20:53:20 +0100
commit80e209df42c091fabd03c229aea5e49826c44b9b (patch)
tree881a671f050be287101b8a2dccf8a7f9c81a1e78
parente984c28fafc224df0f3d9e24a3ed942af5cf929f (diff)
downloadmonzero-gui-80e209df42c091fabd03c229aea5e49826c44b9b.tar.gz
monzero-gui-80e209df42c091fabd03c229aea5e49826c44b9b.tar.xz
monzero-gui-80e209df42c091fabd03c229aea5e49826c44b9b.zip
filter: intercept quit event to avoid deadlock
-rw-r--r--main.qml10
-rw-r--r--src/main/filter.cpp5
-rw-r--r--src/main/filter.h1
-rw-r--r--src/main/main.cpp1
4 files changed, 17 insertions, 0 deletions
diff --git a/main.qml b/main.qml
index 16fcff21..d3cd7b81 100644
--- a/main.qml
+++ b/main.qml
@@ -100,6 +100,7 @@ ApplicationWindow {
property bool splashDisplayedBeforeButtonRequest;
property bool themeTransition: false
property int backgroundSyncType: Wallet.BackgroundSync_Off;
+ property bool isQuitting: false
// fiat price conversion
property real fiatPrice: 0
@@ -282,6 +283,15 @@ ApplicationWindow {
persistentSettings.kdfRounds);
}
+ function gracefulQuit() {
+ if (isQuitting)
+ return;
+ isQuitting = true;
+ closeWallet(function() {
+ Qt.quit();
+ })
+ }
+
function closeWallet(callback) {
// Disconnect all listeners
diff --git a/src/main/filter.cpp b/src/main/filter.cpp
index 1f8155a9..a68f4cac 100644
--- a/src/main/filter.cpp
+++ b/src/main/filter.cpp
@@ -38,6 +38,11 @@ filter::filter(QObject *parent) :
}
bool filter::eventFilter(QObject *obj, QEvent *ev) {
+ if (ev->type() == QEvent::Quit) {
+ emit quitRequested();
+ return true;
+ }
+
// macOS sends fileopen signal for incoming uri handlers
if (ev->type() == QEvent::FileOpen) {
QFileOpenEvent *openEvent = static_cast<QFileOpenEvent *>(ev);
diff --git a/src/main/filter.h b/src/main/filter.h
index 5c5bf57a..6ed643d2 100644
--- a/src/main/filter.h
+++ b/src/main/filter.h
@@ -44,6 +44,7 @@ protected:
bool eventFilter(QObject *obj, QEvent *ev);
signals:
+ void quitRequested();
void sequencePressed(const QVariant &o, const QVariant &seq);
void sequenceReleased(const QVariant &o, const QVariant &seq);
void mousePressed(const QVariant &o, const QVariant &x, const QVariant &y);
diff --git a/src/main/main.cpp b/src/main/main.cpp
index 38901d3f..7ed9e61c 100644
--- a/src/main/main.cpp
+++ b/src/main/main.cpp
@@ -562,6 +562,7 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
qCritical() << "QrCodeScanner : something went wrong !";
#endif
+ QObject::connect(eventFilter, &filter::quitRequested, rootObject, [rootObject]{ QMetaObject::invokeMethod(rootObject, "gracefulQuit", Qt::QueuedConnection); });
QObject::connect(eventFilter, SIGNAL(sequencePressed(QVariant,QVariant)), rootObject, SLOT(sequencePressed(QVariant,QVariant)));
QObject::connect(eventFilter, SIGNAL(sequenceReleased(QVariant,QVariant)), rootObject, SLOT(sequenceReleased(QVariant,QVariant)));
QObject::connect(eventFilter, SIGNAL(mousePressed(QVariant,QVariant,QVariant)), rootObject, SLOT(mousePressed(QVariant,QVariant,QVariant)));