aboutsummaryrefslogtreecommitdiff
path: root/src/main
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 /src/main
parente984c28fafc224df0f3d9e24a3ed942af5cf929f (diff)
downloadmonzero-gui-80e209df42c091fabd03c229aea5e49826c44b9b.tar.gz
monzero-gui-80e209df42c091fabd03c229aea5e49826c44b9b.tar.xz
monzero-gui-80e209df42c091fabd03c229aea5e49826c44b9b.zip
filter: intercept quit event to avoid deadlock
Diffstat (limited to 'src/main')
-rw-r--r--src/main/filter.cpp5
-rw-r--r--src/main/filter.h1
-rw-r--r--src/main/main.cpp1
3 files changed, 7 insertions, 0 deletions
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)));