From 4e7320519a60c3c778fa8257a38e44ed1a06f711 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Thu, 22 Jun 2017 15:32:17 +0200 Subject: [PATCH] feat(App): quit properly on SIGINT --- src/app/App.hpp | 5 ++--- src/app/single-application/SingleApplication.cpp | 14 +++++++++----- src/app/single-application/SingleApplication.hpp | 2 ++ .../single-application/SingleApplicationDBus.cpp | 4 ++++ 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/app/App.hpp b/src/app/App.hpp index bec1daccc..cbe226aec 100644 --- a/src/app/App.hpp +++ b/src/app/App.hpp @@ -72,6 +72,8 @@ public: bool hasFocus () const; + void quit () override; + static App *getInstance () { return static_cast(QApplication::instance()); } @@ -85,9 +87,6 @@ public: Q_INVOKABLE static void smartShowWindow (QQuickWindow *window); -public slots: - void quit (); - signals: void configLocaleChanged (const QString &locale); diff --git a/src/app/single-application/SingleApplication.cpp b/src/app/single-application/SingleApplication.cpp index 57e75a837..d64903ba4 100644 --- a/src/app/single-application/SingleApplication.cpp +++ b/src/app/single-application/SingleApplication.cpp @@ -251,16 +251,16 @@ void SingleApplicationPrivate::connectToPrimary (int msecs, char connectionType) } void SingleApplicationPrivate::terminate (int signum) { + if (signum == SIGINT) { + SingleApplication::instance()->quit(); + return; + } + while (!sharedMem.empty()) { delete sharedMem.back(); sharedMem.pop_back(); } - cout << "[PROCESS ABNORMALLY TERMINATED]: " << signum << endl; - #ifdef Q_OS_LINUX - cout << "If you have used valgrind, please remove your ~/.ICEauthority file and rerun." << endl; - #endif // ifdef Q_OS_UNIX - ::exit(128 + signum); } @@ -453,3 +453,7 @@ bool SingleApplication::sendMessage (QByteArray message, int timeout) { d->socket->waitForBytesWritten(timeout); return dataWritten; } + +void SingleApplication::quit () { + QCoreApplication::quit(); +} diff --git a/src/app/single-application/SingleApplication.hpp b/src/app/single-application/SingleApplication.hpp index ade709624..d4dab4d86 100644 --- a/src/app/single-application/SingleApplication.hpp +++ b/src/app/single-application/SingleApplication.hpp @@ -112,6 +112,8 @@ public: */ bool sendMessage (QByteArray message, int timeout = 100); + virtual void quit (); + Q_SIGNALS: void instanceStarted (); void receivedMessage (quint32 instanceId, QByteArray message); diff --git a/src/app/single-application/SingleApplicationDBus.cpp b/src/app/single-application/SingleApplicationDBus.cpp index 88f581b18..96d5100a2 100644 --- a/src/app/single-application/SingleApplicationDBus.cpp +++ b/src/app/single-application/SingleApplicationDBus.cpp @@ -119,3 +119,7 @@ void SingleApplicationPrivate::messageReceived (quint32 instanceId, QByteArray m Q_Q(SingleApplication); Q_EMIT q->receivedMessage(instanceId, message); } + +void SingleApplication::quit () { + QCoreApplication::quit(); +}