summaryrefslogtreecommitdiff
path: root/gui
diff options
context:
space:
mode:
authorkali kaneko (leap communications) <kali@leap.se>2021-12-01 20:08:33 +0100
committerkali kaneko (leap communications) <kali@leap.se>2021-12-01 20:08:33 +0100
commit81bc89e89404761d2fd15093f7f7ad209784e36a (patch)
tree4b8142c3ac0fc623f9c93ffe804f83783d9e43c6 /gui
parent4f41965d86ada73f6148f756eef5048dc614c8f3 (diff)
[bug] clean exit
Diffstat (limited to 'gui')
-rw-r--r--gui/components/MainView.qml2
-rw-r--r--gui/main.cpp32
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);