From 24d08dbe91106ecd4b4dc80cbdb60a5039ea8bd6 Mon Sep 17 00:00:00 2001 From: Tobias Fella Date: Fri, 2 Apr 2021 18:12:46 +0200 Subject: [PATCH] Add Ctrl-C handler Implement #124 --- src/controller.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/controller.cpp b/src/controller.cpp index e93c49cfa..9d0026b7f 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -32,6 +32,8 @@ #include #include +#include + #include "csapi/account-data.h" #include "csapi/content-repo.h" #include "csapi/logout.h" @@ -79,6 +81,32 @@ Controller::Controller(QObject *parent) QTimer::singleShot(0, this, [=] { invokeLogin(); }); + + QObject::connect(QApplication::instance(), &QCoreApplication::aboutToQuit, QApplication::instance(), [] { + NeoChatConfig::self()->save(); + }); + + // Setup Unix signal handlers + const auto unixExitHandler = [](int /*sig*/) -> void { + QCoreApplication::quit(); + }; + + const int quitSignals[] = {SIGQUIT, SIGINT, SIGTERM, SIGHUP}; + + sigset_t blockingMask; + sigemptyset(&blockingMask); + for (const auto sig : quitSignals) { + sigaddset(&blockingMask, sig); + } + + struct sigaction sa; + sa.sa_handler = unixExitHandler; + sa.sa_mask = blockingMask; + sa.sa_flags = 0; + + for (auto sig : quitSignals) { + sigaction(sig, &sa, nullptr); + } } Controller::~Controller()