From 0dad2567434768c5a3d276678e5222e16526dc47 Mon Sep 17 00:00:00 2001 From: Konstantinos Sideris Date: Sat, 25 Nov 2017 22:47:06 +0200 Subject: [PATCH] Reload theme without restart (#137) --- include/UserSettingsPage.h | 5 +++-- src/UserSettingsPage.cc | 42 +++++++++++++++++++++++++++++++++++++- src/main.cc | 25 ----------------------- 3 files changed, 44 insertions(+), 28 deletions(-) diff --git a/include/UserSettingsPage.h b/include/UserSettingsPage.h index 9e47254f..99a149c6 100644 --- a/include/UserSettingsPage.h +++ b/include/UserSettingsPage.h @@ -36,8 +36,9 @@ public: void save(); void load(); - void setTheme(QString theme) { theme_ = theme; } - void setTray(bool state) { isTrayEnabled_ = state; } + void applyTheme(); + void setTheme(QString theme); + void setTray(bool state); QString theme() const { return !theme_.isEmpty() ? theme_ : "light"; } bool isTrayEnabled() const { return isTrayEnabled_; } diff --git a/src/UserSettingsPage.cc b/src/UserSettingsPage.cc index 79f8f7bd..a5851c57 100644 --- a/src/UserSettingsPage.cc +++ b/src/UserSettingsPage.cc @@ -15,6 +15,7 @@ * along with this program. If not, see . */ +#include #include #include #include @@ -33,7 +34,46 @@ UserSettings::load() { QSettings settings; isTrayEnabled_ = settings.value("user/window/tray", true).toBool(); - theme_ = settings.value("user/theme", "default").toString(); + theme_ = settings.value("user/theme", "light").toString(); + + applyTheme(); +} + +void +UserSettings::setTheme(QString theme) +{ + theme_ = theme; + save(); + applyTheme(); +} + +void +UserSettings::setTray(bool state) +{ + isTrayEnabled_ = state; + save(); +} +void +UserSettings::applyTheme() +{ + QFile stylefile; + QPalette pal; + + if (theme() == "light") { + stylefile.setFileName(":/styles/styles/nheko.qss"); + pal.setColor(QPalette::Link, QColor("#333")); + } else if (theme() == "dark") { + stylefile.setFileName(":/styles/styles/nheko-dark.qss"); + pal.setColor(QPalette::Link, QColor("#d7d9dc")); + } else { + stylefile.setFileName(":/styles/styles/system.qss"); + } + + stylefile.open(QFile::ReadOnly); + QString stylesheet = QString(stylefile.readAll()); + + QApplication::setPalette(pal); + qobject_cast(QApplication::instance())->setStyleSheet(stylesheet); } void diff --git a/src/main.cc b/src/main.cc index 7338e578..89731ec7 100644 --- a/src/main.cc +++ b/src/main.cc @@ -73,31 +73,6 @@ main(int argc, char *argv[]) QSettings settings; - QFile stylefile; - - if (!settings.contains("user/theme")) - settings.setValue("user/theme", "light"); - - const auto theme = settings.value("user/theme", "light").toString(); - - QPalette pal; - - if (theme == "light") { - stylefile.setFileName(":/styles/styles/nheko.qss"); - pal.setColor(QPalette::Link, QColor("#333")); - } else if (theme == "dark") { - stylefile.setFileName(":/styles/styles/nheko-dark.qss"); - pal.setColor(QPalette::Link, QColor("#d7d9dc")); - } else { - stylefile.setFileName(":/styles/styles/system.qss"); - } - - app.setPalette(pal); - - stylefile.open(QFile::ReadOnly); - QString stylesheet = QString(stylefile.readAll()); - - app.setStyleSheet(stylesheet); // Set the default if a value has not been set. if (settings.value("font/size").toInt() == 0) settings.setValue("font/size", 12);