You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libcutefish/screen/screen.cpp

74 lines
1.9 KiB
C++

#include "screen.h"
#include "outputmodel.h"
#include <kscreen/setconfigoperation.h>
#include <QQmlExtensionPlugin>
#include <QQmlEngine>
Screen::Screen(QObject *parent)
: QObject(parent)
{
qmlRegisterType<OutputModel>();
load();
}
void Screen::load()
{
// Don't pull away the outputModel under QML's feet
// signal its disappearance first before deleting and replacing it.
// We take the m_config pointer so outputModel() will return null,
// gracefully cleaning up the QML side and only then we will delete it.
auto *oldConfig = m_config.release();
if (oldConfig) {
emit outputModelChanged();
delete oldConfig;
}
m_config.reset(new ConfigHandler(this));
connect(m_config.get(), &ConfigHandler::outputModelChanged, this, &Screen::outputModelChanged);
connect(new KScreen::GetConfigOperation(), &KScreen::GetConfigOperation::finished, this, &Screen::configReady);
}
void Screen::save()
{
if (!m_config)
return;
auto config = m_config->config();
bool atLeastOneEnabledOutput = false;
for (const KScreen::OutputPtr &output : config->outputs()) {
KScreen::ModePtr mode = output->currentMode();
atLeastOneEnabledOutput |= output->isEnabled();
}
m_config->writeControl();
auto *op = new KScreen::SetConfigOperation(config);
op->exec();
}
OutputModel *Screen::outputModel() const
{
if (!m_config) {
return nullptr;
}
return m_config->outputModel();
}
void Screen::configReady(KScreen::ConfigOperation *op)
{
if (op->hasError()) {
m_config.reset();
return;
}
KScreen::ConfigPtr config = qobject_cast<KScreen::GetConfigOperation *>(op)->config();
// const bool autoRotationSupported = config->supportedFeatures() & (KScreen::Config::Feature::AutoRotation | KScreen::Config::Feature::TabletMode);
m_config->setConfig(config);
}