mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-12-17 19:54:33 -05:00
Move theme detection into Application
* Add function to Application to quickly determine if in light or dark theme * Add kpxcApp symbol * Explicitly define main function for GUI tests to improve performance and use custom Application.
This commit is contained in:
parent
a8c02fdc3c
commit
1d7ef5d4eb
@ -41,7 +41,7 @@ static const QMap<QString, QString> deprecationMap = {
|
||||
{QStringLiteral("security/IconDownloadFallbackToGoogle"), QStringLiteral("security/IconDownloadFallback")},
|
||||
};
|
||||
|
||||
Config* Config::m_instance(nullptr);
|
||||
QPointer<Config> Config::m_instance(nullptr);
|
||||
|
||||
QVariant Config::get(const QString& key)
|
||||
{
|
||||
@ -246,13 +246,17 @@ Config* Config::instance()
|
||||
|
||||
void Config::createConfigFromFile(const QString& file)
|
||||
{
|
||||
Q_ASSERT(!m_instance);
|
||||
if (m_instance) {
|
||||
delete m_instance;
|
||||
}
|
||||
m_instance = new Config(file, qApp);
|
||||
}
|
||||
|
||||
void Config::createTempFileInstance()
|
||||
{
|
||||
Q_ASSERT(!m_instance);
|
||||
if (m_instance) {
|
||||
delete m_instance;
|
||||
}
|
||||
auto* tmpFile = new QTemporaryFile();
|
||||
bool openResult = tmpFile->open();
|
||||
Q_ASSERT(openResult);
|
||||
|
@ -19,6 +19,7 @@
|
||||
#ifndef KEEPASSX_CONFIG_H
|
||||
#define KEEPASSX_CONFIG_H
|
||||
|
||||
#include <QPointer>
|
||||
#include <QScopedPointer>
|
||||
#include <QVariant>
|
||||
|
||||
@ -53,7 +54,7 @@ private:
|
||||
void init(const QString& fileName);
|
||||
void upgrade();
|
||||
|
||||
static Config* m_instance;
|
||||
static QPointer<Config> m_instance;
|
||||
|
||||
QScopedPointer<QSettings> m_settings;
|
||||
QHash<QString, QVariant> m_defaults;
|
||||
|
@ -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
|
||||
@ -65,6 +68,26 @@ Application::Application(int& argc, char** argv)
|
||||
registerUnixSignals();
|
||||
#endif
|
||||
|
||||
QString appTheme = config()->get("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, only check for dark theme when not on Windows
|
||||
#ifndef Q_OS_WIN
|
||||
m_darkTheme = osUtils->isDarkMode();
|
||||
#endif
|
||||
}
|
||||
|
||||
QString userName = qgetenv("USER");
|
||||
if (userName.isEmpty()) {
|
||||
userName = qgetenv("USERNAME");
|
||||
@ -281,3 +304,8 @@ bool Application::sendFileNamesToRunningInstance(const QStringList& fileNames)
|
||||
const bool disconnected = client.waitForDisconnected(WaitTimeoutMSec);
|
||||
return writeOk && disconnected;
|
||||
}
|
||||
|
||||
bool Application::isDarkTheme() const
|
||||
{
|
||||
return m_darkTheme;
|
||||
}
|
||||
|
@ -41,6 +41,7 @@ public:
|
||||
|
||||
bool event(QEvent* event) override;
|
||||
bool isAlreadyRunning() const;
|
||||
bool isDarkTheme() const;
|
||||
|
||||
bool sendFileNamesToRunningInstance(const QStringList& fileNames);
|
||||
|
||||
@ -68,6 +69,7 @@ private:
|
||||
static int unixSignalSocket[2];
|
||||
#endif
|
||||
bool m_alreadyRunning;
|
||||
bool m_darkTheme = false;
|
||||
QLockFile* m_lockFile;
|
||||
QLocalServer m_lockServer;
|
||||
QString m_socketName;
|
||||
@ -76,4 +78,6 @@ private:
|
||||
#endif
|
||||
};
|
||||
|
||||
#define kpxcApp qobject_cast<Application*>(Application::instance())
|
||||
|
||||
#endif // KEEPASSX_APPLICATION_H
|
||||
|
16
src/main.cpp
16
src/main.cpp
@ -29,9 +29,6 @@
|
||||
#include "gui/Application.h"
|
||||
#include "gui/MainWindow.h"
|
||||
#include "gui/MessageBox.h"
|
||||
#include "gui/osutils/OSUtils.h"
|
||||
#include "gui/styles/dark/DarkStyle.h"
|
||||
#include "gui/styles/light/LightStyle.h"
|
||||
|
||||
#if defined(WITH_ASAN) && defined(WITH_LSAN)
|
||||
#include <sanitizer/lsan_interface.h>
|
||||
@ -64,19 +61,6 @@ int main(int argc, char** argv)
|
||||
Application::setApplicationName("KeePassXC");
|
||||
Application::setApplicationVersion(KEEPASSXC_VERSION);
|
||||
|
||||
QString appTheme = config()->get("GUI/ApplicationTheme").toString();
|
||||
if (appTheme == "auto") {
|
||||
if (osUtils->isDarkMode()) {
|
||||
QApplication::setStyle(new DarkStyle);
|
||||
} else {
|
||||
QApplication::setStyle(new LightStyle);
|
||||
}
|
||||
} else if (appTheme == "light") {
|
||||
QApplication::setStyle(new LightStyle);
|
||||
} else if (appTheme == "dark") {
|
||||
QApplication::setStyle(new DarkStyle);
|
||||
}
|
||||
|
||||
// don't set organizationName as that changes the return value of
|
||||
// QStandardPaths::writableLocation(QDesktopServices::DataLocation)
|
||||
Bootstrap::bootstrapApplication();
|
||||
|
@ -74,16 +74,27 @@
|
||||
#include "keys/FileKey.h"
|
||||
#include "keys/PasswordKey.h"
|
||||
|
||||
QTEST_MAIN(TestGui)
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
|
||||
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||
#endif
|
||||
Application app(argc, argv);
|
||||
app.setApplicationName("KeePassXC");
|
||||
app.setApplicationVersion(KEEPASSXC_VERSION);
|
||||
app.setQuitOnLastWindowClosed(false);
|
||||
app.setAttribute(Qt::AA_Use96Dpi, true);
|
||||
QTEST_DISABLE_KEYPAD_NAVIGATION
|
||||
TestGui tc;
|
||||
QTEST_SET_MAIN_SOURCE_PATH
|
||||
return QTest::qExec(&tc, argc, argv);
|
||||
}
|
||||
|
||||
static QString dbFileName = QStringLiteral(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.kdbx");
|
||||
|
||||
void TestGui::initTestCase()
|
||||
{
|
||||
Application::setApplicationName("KeePassXC");
|
||||
Application::setApplicationVersion(KEEPASSXC_VERSION);
|
||||
QApplication::setQuitOnLastWindowClosed(false);
|
||||
|
||||
QVERIFY(Crypto::init());
|
||||
Config::createTempFileInstance();
|
||||
// Disable autosave so we can test the modified file indicator
|
||||
|
@ -47,7 +47,22 @@
|
||||
#include "gui/entry/EditEntryWidget.h"
|
||||
#include "gui/entry/EntryView.h"
|
||||
|
||||
QTEST_MAIN(TestGuiBrowser)
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
|
||||
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||
#endif
|
||||
Application app(argc, argv);
|
||||
app.setApplicationName("KeePassXC");
|
||||
app.setApplicationVersion(KEEPASSXC_VERSION);
|
||||
app.setQuitOnLastWindowClosed(false);
|
||||
app.setAttribute(Qt::AA_Use96Dpi, true);
|
||||
QTEST_DISABLE_KEYPAD_NAVIGATION
|
||||
TestGuiBrowser tc;
|
||||
QTEST_SET_MAIN_SOURCE_PATH
|
||||
return QTest::qExec(&tc, argc, argv);
|
||||
}
|
||||
|
||||
void TestGuiBrowser::initTestCase()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user