diff options
Diffstat (limited to 'gui')
-rw-r--r-- | gui/components/MainView.qml | 2 | ||||
-rw-r--r-- | gui/main.cpp | 32 |
2 files changed, 25 insertions, 9 deletions
diff --git a/gui/components/MainView.qml b/gui/components/MainView.qml index 0893a2a..0f5fb58 100644 --- a/gui/components/MainView.qml +++ b/gui/components/MainView.qml @@ -76,7 +76,7 @@ Page { text: qsTr("Quit") icon: "../resources/quit.svg" triggered: function () { - Qt.callLater(backend.quit) + backend.quit() } } } diff --git a/gui/main.cpp b/gui/main.cpp index 993ec2d..5a265eb 100644 --- a/gui/main.cpp +++ b/gui/main.cpp @@ -36,11 +36,6 @@ std::string getEnv(std::string const& key) return val == NULL ? std::string() : std::string(val); } -void signalHandler(int) { - Quit(); - exit(0); -} - QString getAppName(QJsonValue info, QString provider) { for (auto p: info.toArray()) { QJsonObject item = p.toObject(); @@ -51,17 +46,38 @@ QString getAppName(QJsonValue info, QString provider) { return "BitmaskVPN"; } -int main(int argc, char **argv) { - signal(SIGINT, signalHandler); +void catchUnixSignals(std::initializer_list<int> quitSignals) { + auto handler = [](int sig) -> void { + printf("\nCatched signal(%d): quitting\n", sig); + Quit(); + QGuiApplication::quit(); + }; + + sigset_t blocking_mask; + sigemptyset(&blocking_mask); + for (auto sig : quitSignals) + sigaddset(&blocking_mask, sig); + + struct sigaction sa; + sa.sa_handler = handler; + sa.sa_mask = blocking_mask; + sa.sa_flags = 0; + + for (auto sig : quitSignals) + sigaction(sig, &sa, nullptr); +} +int main(int argc, char **argv) { Backend backend; QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication::setApplicationVersion(backend.getVersion()); - QApplication app(argc, argv); + QGuiApplication app(argc, argv); app.setQuitOnLastWindowClosed(false); app.setAttribute(Qt::AA_UseHighDpiPixmaps); + catchUnixSignals({SIGINT, SIGTERM}); + /* load providers json */ QFile providerJson (":/providers.json"); providerJson.open(QIODevice::ReadOnly | QIODevice::Text); |