diff options
Diffstat (limited to 'src/gui/Application.cpp')
-rw-r--r-- | src/gui/Application.cpp | 59 |
1 files changed, 53 insertions, 6 deletions
diff --git a/src/gui/Application.cpp b/src/gui/Application.cpp index b79f2c30a..625540c1d 100644 --- a/src/gui/Application.cpp +++ b/src/gui/Application.cpp @@ -18,8 +18,14 @@ */ #include "Application.h" -#include "MainWindow.h" + +#include "autotype/AutoType.h" #include "core/Config.h" +#include "core/Global.h" +#include "gui/MainWindow.h" +#include "gui/osutils/OSUtils.h" +#include "gui/styles/dark/DarkStyle.h" +#include "gui/styles/light/LightStyle.h" #include <QFileInfo> #include <QFileOpenEvent> @@ -28,9 +34,6 @@ #include <QStandardPaths> #include <QtNetwork/QLocalSocket> -#include "autotype/AutoType.h" -#include "core/Global.h" - #if defined(Q_OS_WIN) || (defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)) #include "core/OSEventFilter.h" #endif @@ -96,7 +99,7 @@ Application::Application(int& argc, char** argv) m_lockServer.listen(m_socketName); break; case QLockFile::LockFailedError: { - if (config()->get("SingleInstance").toBool()) { + if (config()->get(Config::SingleInstance).toBool()) { // Attempt to connect to the existing instance QLocalSocket client; for (int i = 0; i < 3; ++i) { @@ -139,6 +142,32 @@ Application::~Application() } } +void Application::applyTheme() +{ + QString appTheme = config()->get(Config::GUI_ApplicationTheme).toString(); + if (appTheme == "auto") { + if (osUtils->isDarkMode()) { + setStyle(new DarkStyle); + m_darkTheme = true; + } else { + setStyle(new LightStyle); + } + } else if (appTheme == "light") { + setStyle(new LightStyle); + } else if (appTheme == "dark") { + setStyle(new DarkStyle); + m_darkTheme = true; + } else { + // Classic mode, don't check for dark theme on Windows + // because Qt 5.x does not support it +#ifndef Q_OS_WIN + m_darkTheme = osUtils->isDarkMode(); +#endif + } + + setPalette(style()->standardPalette()); +} + bool Application::event(QEvent* event) { // Handle Apple QFileOpenEvent from finder (double click on .kdbx file) @@ -257,7 +286,7 @@ bool Application::isAlreadyRunning() const // In DEBUG mode we can run unlimited instances return false; #endif - return config()->get("SingleInstance").toBool() && m_alreadyRunning; + return config()->get(Config::SingleInstance).toBool() && m_alreadyRunning; } bool Application::sendFileNamesToRunningInstance(const QStringList& fileNames) @@ -281,3 +310,21 @@ bool Application::sendFileNamesToRunningInstance(const QStringList& fileNames) const bool disconnected = client.waitForDisconnected(WaitTimeoutMSec); return writeOk && disconnected; } + +bool Application::isDarkTheme() const +{ + return m_darkTheme; +} + +void Application::restart() +{ + // Disable single instance + m_lockServer.close(); + if (m_lockFile) { + m_lockFile->unlock(); + delete m_lockFile; + m_lockFile = nullptr; + } + + exit(RESTART_EXITCODE); +} |