diff --git a/core/main.cpp b/core/main.cpp index 03827d3..c7bb820 100644 --- a/core/main.cpp +++ b/core/main.cpp @@ -105,11 +105,15 @@ int main(int argc, char *argv[]) QThread* coreThread = new QThread(); squawk->moveToThread(coreThread); + QObject::connect(&sc, &SignalCatcher::interrupt, &app, &QApplication::closeAllWindows); + QObject::connect(coreThread, &QThread::started, squawk, &Core::Squawk::start); - QObject::connect(&app, &QApplication::aboutToQuit, squawk, &Core::Squawk::stop); - QObject::connect(&app, &QApplication::aboutToQuit, &w, &QMainWindow::close); - QObject::connect(squawk, &Core::Squawk::quit, coreThread, &QThread::quit); - QObject::connect(coreThread, &QThread::finished, squawk, &Core::Squawk::deleteLater); + QObject::connect(&app, &QApplication::lastWindowClosed, squawk, &Core::Squawk::stop); + QObject::connect(&app, &QApplication::lastWindowClosed, &w, &Squawk::writeSettings); + //QObject::connect(&app, &QApplication::aboutToQuit, &w, &QMainWindow::close); + QObject::connect(squawk, &Core::Squawk::quit, squawk, &Core::Squawk::deleteLater); + QObject::connect(squawk, &Core::Squawk::quit, coreThread, &QThread::quit, Qt::QueuedConnection); + QObject::connect(coreThread, &QThread::finished, &app, &QApplication::quit, Qt::QueuedConnection); QObject::connect(&w, &Squawk::newAccountRequest, squawk, &Core::Squawk::newAccountRequest); QObject::connect(&w, &Squawk::modifyAccountRequest, squawk, &Core::Squawk::modifyAccountRequest); @@ -169,12 +173,11 @@ int main(int argc, char *argv[]) QObject::connect(squawk, &Core::Squawk::ready, &w, &Squawk::readSettings); coreThread->start(); - int result = app.exec(); - - w.writeSettings(); - coreThread->wait(500); //TODO hate doing that but settings for some reason don't get saved to the disk - + + if (coreThread->isRunning()) { + coreThread->wait(); + } return result; } diff --git a/core/signalcatcher.cpp b/core/signalcatcher.cpp index dcdcb88..046c67e 100644 --- a/core/signalcatcher.cpp +++ b/core/signalcatcher.cpp @@ -50,7 +50,7 @@ void SignalCatcher::handleSigInt() char tmp; ssize_t s = ::read(sigintFd[1], &tmp, sizeof(tmp)); - app->quit(); + emit interrupt(); snInt->setEnabled(true); } diff --git a/core/signalcatcher.h b/core/signalcatcher.h index 7d75260..0c8e757 100644 --- a/core/signalcatcher.h +++ b/core/signalcatcher.h @@ -33,6 +33,9 @@ public: static void intSignalHandler(int unused); +signals: + void interrupt(); + public slots: void handleSigInt(); diff --git a/ui/squawk.cpp b/ui/squawk.cpp index 4d22b34..7acda3d 100644 --- a/ui/squawk.cpp +++ b/ui/squawk.cpp @@ -883,6 +883,10 @@ void Squawk::writeSettings() } settings.endGroup(); settings.endGroup(); + + settings.sync(); + + qDebug() << "Saved settings"; } void Squawk::onItemCollepsed(const QModelIndex& index) diff --git a/ui/squawk.h b/ui/squawk.h index 26dc0c9..b419057 100644 --- a/ui/squawk.h +++ b/ui/squawk.h @@ -54,8 +54,6 @@ public: explicit Squawk(QWidget *parent = nullptr); ~Squawk() override; - void writeSettings(); - signals: void newAccountRequest(const QMap&); void modifyAccountRequest(const QString&, const QMap&); @@ -84,6 +82,7 @@ signals: void localPathInvalid(const QString& path); public slots: + void writeSettings(); void readSettings(); void newAccount(const QMap& account); void changeAccount(const QString& account, const QMap& data); diff --git a/ui/widgets/settings/pageappearance.cpp b/ui/widgets/settings/pageappearance.cpp index 2fb8dc8..1c558f2 100644 --- a/ui/widgets/settings/pageappearance.cpp +++ b/ui/widgets/settings/pageappearance.cpp @@ -2,6 +2,10 @@ #include "ui_pageappearance.h" #include +#include +#include + +static const QStringList filters = {"*.colors"}; PageAppearance::PageAppearance(QWidget* parent): QWidget(parent), @@ -28,6 +32,17 @@ PageAppearance::PageAppearance(QWidget* parent): } connect(m_ui->themeInput, qOverload(&QComboBox::currentIndexChanged), this, &PageAppearance::onThemeChanged); + + m_ui->colorInput->addItem(tr("System")); + const QStringList dirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "color-schemes", QStandardPaths::LocateDirectory); + QStringList schemeFiles; + for (const QString &dir : dirs) { + const QStringList fileNames = QDir(dir).entryList(filters); + for (const QString &file : fileNames) { + m_ui->colorInput->addItem(dir + QDir::separator() + file); + } + } + } PageAppearance::~PageAppearance() diff --git a/ui/widgets/settings/pageappearance.ui b/ui/widgets/settings/pageappearance.ui index 1199347..afcb3a8 100644 --- a/ui/widgets/settings/pageappearance.ui +++ b/ui/widgets/settings/pageappearance.ui @@ -21,6 +21,16 @@ + + + + + + + Color scheme + + +