fix: suppress warnings before component is complete

This commit is contained in:
2 * r + 2 * t 2026-04-13 03:14:10 +10:00
parent 8c8d196e20
commit 9de094b5ed
4 changed files with 31 additions and 7 deletions

View file

@ -2,6 +2,8 @@
#include "config.hpp"
#include "monitorconfigmanager.hpp"
#include <qquickitem.h>
namespace caelestia::config {
Config::Config(QObject* parent)
@ -9,6 +11,12 @@ Config::Config(QObject* parent)
initialize();
}
void Config::classBegin() {}
void Config::componentComplete() {
m_complete = true;
}
QString Config::screen() const {
return m_screen;
}
@ -49,7 +57,7 @@ void Config::attachedParentChange(
const Type* Config::name() const { \
if (m_config) \
return m_config->name(); \
if (parent()) \
if (m_complete && parent()) /* Suppress warnings before component is complete */ \
qCWarning(lcConfig, "Config.%s accessed without a screen set on %s", #name, \
parent()->metaObject()->className()); \
return GlobalConfig::instance()->name(); \

View file

@ -6,8 +6,9 @@
namespace caelestia::config {
class Config : public QQuickAttachedPropertyPropagator {
class Config : public QQuickAttachedPropertyPropagator, public QQmlParserStatus {
Q_OBJECT
Q_INTERFACES(QQmlParserStatus)
QML_ELEMENT
QML_UNCREATABLE("")
QML_ATTACHED(Config)
@ -67,8 +68,12 @@ protected:
QQuickAttachedPropertyPropagator* newParent, QQuickAttachedPropertyPropagator* oldParent) override;
private:
void classBegin() override;
void componentComplete() override;
void propagateScreen();
bool m_complete = false;
QString m_screen;
GlobalConfig* m_config = nullptr;
};

View file

@ -8,10 +8,10 @@ namespace caelestia::config {
namespace {
const AppearanceConfig* resolveAppearance(GlobalConfig* config, const char* prop, QObject* parent) {
const AppearanceConfig* resolveAppearance(GlobalConfig* config, bool complete, const char* prop, QObject* parent) {
if (config)
return config->appearance();
if (parent)
if (complete && parent)
qCWarning(lcConfig, "Tokens.%s accessed without a screen set on %s", prop, parent->metaObject()->className());
return GlobalConfig::instance()->appearance();
}
@ -25,6 +25,12 @@ Tokens::Tokens(QObject* parent)
initialize();
}
void Tokens::classBegin() {}
void Tokens::componentComplete() {
m_complete = true;
}
QString Tokens::screen() const {
return m_screen;
}
@ -71,7 +77,7 @@ void Tokens::bindAnim() {
#define TOKENS_ATTACHED_GETTER(Type, name) \
const Type* Tokens::name() const { \
auto* a = resolveAppearance(m_config, #name, parent()); \
auto* a = resolveAppearance(m_config, m_complete, #name, parent()); \
return a ? a->name() : nullptr; \
}
@ -89,7 +95,7 @@ const AppearanceTransparency* Tokens::transparency() const {
const SizeTokens* Tokens::sizes() const {
if (m_tokens)
return m_tokens->sizes();
if (parent())
if (m_complete && parent())
qCWarning(lcConfig, "Tokens.sizes accessed without a screen set on %s", parent()->metaObject()->className());
return TokenConfig::instance()->sizes();
}

View file

@ -9,8 +9,9 @@
namespace caelestia::config {
class Tokens : public QQuickAttachedPropertyPropagator {
class Tokens : public QQuickAttachedPropertyPropagator, public QQmlParserStatus {
Q_OBJECT
Q_INTERFACES(QQmlParserStatus)
QML_ELEMENT
QML_UNCREATABLE("")
QML_ATTACHED(Tokens)
@ -51,9 +52,13 @@ protected:
QQuickAttachedPropertyPropagator* newParent, QQuickAttachedPropertyPropagator* oldParent) override;
private:
void classBegin() override;
void componentComplete() override;
void propagateScreen();
void bindAnim();
bool m_complete = false;
QString m_screen;
GlobalConfig* m_config = nullptr;
TokenConfig* m_tokens = nullptr;