diff --git a/initialstart/modules/prepare/prepareutil.cpp b/initialstart/modules/prepare/prepareutil.cpp index ff4c03d5..ec3c8a14 100644 --- a/initialstart/modules/prepare/prepareutil.cpp +++ b/initialstart/modules/prepare/prepareutil.cpp @@ -16,18 +16,30 @@ PrepareUtil::PrepareUtil(QObject *parent) : QObject{parent} , m_colorsSettings{new ColorsSettings(this)} { - connect(new KScreen::GetConfigOperation(), &KScreen::GetConfigOperation::finished, this, [this](auto *op) { + initKScreen([]() { }); + + // set property initially + m_usingDarkTheme = m_colorsSettings->colorScheme() == "BreezeDark"; +} + +void PrepareUtil::initKScreen(std::function callback) +{ + connect(new KScreen::GetConfigOperation(), &KScreen::GetConfigOperation::finished, this, [this, callback](auto *op) { m_config = qobject_cast(op)->config(); if (!m_config) { return; } + KScreen::ConfigMonitor::instance()->addConfig(m_config); int scaling = 100; - // to determine the scaling value: - // try to take the primary display's scaling, otherwise use the scaling of any of the displays + // To determine the scaling value: + // Try to take the primary display's scaling, otherwise use the scaling of any of the displays for (KScreen::OutputPtr output : m_config->outputs()) { + if (!output) { + continue; + } scaling = output->scale() * 100; m_output = output->id(); if (output->isPrimary()) { @@ -37,10 +49,9 @@ PrepareUtil::PrepareUtil(QObject *parent) m_scaling = scaling; Q_EMIT scalingChanged(); - }); - // set property initially - m_usingDarkTheme = m_colorsSettings->colorScheme() == "BreezeDark"; + callback(); + }); } int PrepareUtil::scaling() const @@ -51,13 +62,24 @@ int PrepareUtil::scaling() const void PrepareUtil::setScaling(int scaling) { if (!m_config) { + initKScreen([this, scaling]() { + setScalingInternal(scaling); + }); return; } + setScalingInternal(scaling); +} + +void PrepareUtil::setScalingInternal(int scaling) +{ const auto outputs = m_config->outputs(); qreal scalingNum = ((double)scaling) / 100; for (KScreen::OutputPtr output : outputs) { + if (!output) { + continue; + } if (output->id() == m_output) { output->setScale(scalingNum); } diff --git a/initialstart/modules/prepare/prepareutil.h b/initialstart/modules/prepare/prepareutil.h index 15260573..f3c9768e 100644 --- a/initialstart/modules/prepare/prepareutil.h +++ b/initialstart/modules/prepare/prepareutil.h @@ -33,6 +33,9 @@ Q_SIGNALS: void usingDarkThemeChanged(); private: + void initKScreen(std::function callback); + void setScalingInternal(int scaling); + int m_scaling; bool m_usingDarkTheme;