nosignal-shell/plugin/src/Caelestia/Config/tokens.cpp
2 * r + 2 * t ec8ce65857 feat: m3 expressive menus
Also fix the player selector being click through
Fixes #1405
Closes #1350
2026-04-19 19:15:31 +10:00

54 lines
1.4 KiB
C++

#include "tokens.hpp"
#include "monitorconfigmanager.hpp"
#include <qqmlengine.h>
#include <qstandardpaths.h>
namespace caelestia::config {
namespace {
QString configDir() {
return QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation) + QStringLiteral("/caelestia/");
}
} // namespace
TokenConfig::TokenConfig(QObject* parent)
: RootConfig(parent)
, m_appearance(new AppearanceTokens(this))
, m_sizes(new SizeTokens(this)) {
setupFileBackend(configDir() + QStringLiteral("shell-tokens.json"));
}
TokenConfig::TokenConfig(TokenConfig* fallback, const QString& filePath, const QString& screen, QObject* parent)
: RootConfig(parent)
, m_appearance(new AppearanceTokens(this))
, m_sizes(new SizeTokens(this)) {
if (!filePath.isEmpty())
setupFileBackend(filePath, screen);
if (fallback)
syncFromGlobal(fallback);
}
TokenConfig* TokenConfig::instance() {
static TokenConfig instance;
return &instance;
}
TokenConfig* TokenConfig::defaults() {
if (!m_defaults)
m_defaults = new TokenConfig(nullptr, QString(), QString(), this);
return m_defaults;
}
TokenConfig* TokenConfig::forScreen(const QString& screen) {
return MonitorConfigManager::instance()->tokensForScreen(screen);
}
TokenConfig* TokenConfig::create(QQmlEngine*, QJSEngine*) {
QQmlEngine::setObjectOwnership(instance(), QQmlEngine::CppOwnership);
return instance();
}
} // namespace caelestia::config