diff --git a/main/main.cpp b/main/main.cpp index deec573..d5043c3 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -1,5 +1,7 @@ #include "ui/mainwindow.h" +#include + #include #include #include @@ -13,6 +15,13 @@ #include "sys/windows/MiniDump.h" #endif +void signal_handler(int signum) { + if (qApp) { + GetMainWindow()->on_commitDataRequest(); + qApp->exit(); + } +} + int main(int argc, char *argv[]) { // Core dump #ifdef Q_OS_WIN @@ -120,6 +129,10 @@ int main(int argc, char *argv[]) { QCoreApplication::installTranslator(&trans_qt); } + //Signals + signal(SIGTERM, signal_handler); + signal(SIGINT, signal_handler); + MainWindow w; return QApplication::exec(); } diff --git a/ui/mainwindow.cpp b/ui/mainwindow.cpp index 33a8cf6..5809e36 100644 --- a/ui/mainwindow.cpp +++ b/ui/mainwindow.cpp @@ -425,6 +425,8 @@ MainWindow::MainWindow(QWidget *parent) } } + connect(qApp, &QGuiApplication::commitDataRequest, this, &MainWindow::on_commitDataRequest); + if (!NekoRay::dataStore->start_minimal) show(); } @@ -538,11 +540,8 @@ void MainWindow::on_menu_hotkey_settings_triggered() { USE_DIALOG(DialogHotkey) } -void MainWindow::on_menu_exit_triggered() { - neko_set_spmode(NekoRay::SystemProxyMode::DISABLE, false); - if (title_spmode == NekoRay::SystemProxyMode::VPN) return; - RegisterHotkey(true); - +void MainWindow::on_commitDataRequest() { + qDebug() << "Start of data save"; if (!isMaximized()) { auto olds = NekoRay::dataStore->mw_size; auto news = QString("%1x%2").arg(size().width()).arg(size().height()); @@ -551,17 +550,26 @@ void MainWindow::on_menu_exit_triggered() { NekoRay::dataStore->Save(); } } - + // auto last_id = NekoRay::dataStore->started_id; neko_stop(); if (NekoRay::dataStore->remember_enable && last_id >= 0) { NekoRay::dataStore->UpdateStartedId(last_id); } + qDebug() << "End of data save"; +} +void MainWindow::on_menu_exit_triggered() { + neko_set_spmode(NekoRay::SystemProxyMode::DISABLE, false); + if (title_spmode == NekoRay::SystemProxyMode::VPN) return; + RegisterHotkey(true); + // + on_commitDataRequest(); + // core_process_killed = true; hide(); ExitNekorayCore(); - + // if (exit_update) { QDir::setCurrent(QApplication::applicationDirPath()); QProcess::startDetached("./updater", QStringList{}); diff --git a/ui/mainwindow.h b/ui/mainwindow.h index 97502f9..5fa0f60 100644 --- a/ui/mainwindow.h +++ b/ui/mainwindow.h @@ -58,6 +58,8 @@ signals: public slots: + void on_commitDataRequest(); + void on_menu_exit_triggered(); private slots: