pull/2/head
cutefishd 4 years ago
parent b50ce88c28
commit 928d428e11

@ -1,58 +0,0 @@
{
"files.associations": {
"array": "cpp",
"atomic": "cpp",
"bit": "cpp",
"*.tcc": "cpp",
"cctype": "cpp",
"chrono": "cpp",
"clocale": "cpp",
"cmath": "cpp",
"compare": "cpp",
"concepts": "cpp",
"condition_variable": "cpp",
"cstdarg": "cpp",
"cstddef": "cpp",
"cstdint": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"ctime": "cpp",
"cwchar": "cpp",
"cwctype": "cpp",
"deque": "cpp",
"list": "cpp",
"map": "cpp",
"unordered_map": "cpp",
"vector": "cpp",
"exception": "cpp",
"algorithm": "cpp",
"functional": "cpp",
"iterator": "cpp",
"memory": "cpp",
"memory_resource": "cpp",
"numeric": "cpp",
"optional": "cpp",
"random": "cpp",
"ratio": "cpp",
"string": "cpp",
"string_view": "cpp",
"system_error": "cpp",
"tuple": "cpp",
"type_traits": "cpp",
"utility": "cpp",
"future": "cpp",
"initializer_list": "cpp",
"iosfwd": "cpp",
"limits": "cpp",
"mutex": "cpp",
"new": "cpp",
"ostream": "cpp",
"ranges": "cpp",
"stdexcept": "cpp",
"stop_token": "cpp",
"streambuf": "cpp",
"thread": "cpp",
"typeinfo": "cpp",
"variant": "cpp"
}
}

5
debian/changelog vendored

@ -0,0 +1,5 @@
libcutefish (0.1) UNRELEASED; urgency=low
* Initial release (CutefishOS) <cutefishos@foxmail.com>
-- CutefishOS <cutefishos@foxmail.com> Thu, 16 Oct 2014 17:22:15 +0200

1
debian/compat vendored

@ -0,0 +1 @@
9

24
debian/control vendored

@ -0,0 +1,24 @@
Source: libcutefish
Section: devel
Priority: optional
Maintainer: CutefishOS <cutefishos@foxmail.com>
Build-Depends: cmake,
debhelper (>= 9),
extra-cmake-modules,
libkf5networkmanagerqt-dev,
libkf5kio-dev,
modemmanager-qt-dev,
libqt5sensors5-dev,
qtbase5-dev,
qtdeclarative5-dev,
qtquickcontrols2-5-dev,
qttools5-dev,
qttools5-dev-tools
Standards-Version: 4.5.0
Homepage: https://github.com/cutefishos/qt-plugins
Package: libcutefish
Architecture: any
Depends: ${misc:Depends},
${shlibs:Depends}
Description: CutefishOS Library

3
debian/copyright vendored

@ -0,0 +1,3 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: calamares
Source: <url://example.com>

9
debian/rules vendored

@ -0,0 +1,9 @@
#!/usr/bin/make -f
export QT_SELECT=5
%:
dh $@
override_dh_auto_configure:
dh_auto_configure -- -DEMBED_TRANSLATIONS=ON -DBUILD_TESTING=ON

@ -0,0 +1 @@
3.0 (quilt)

@ -17,11 +17,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "control.h"
#include "globals.h"
#include <QStringBuilder>
#include <KDirWatch>
#include <QDir>
#include <QFile>
#include <QFileSystemWatcher>
#include <QJsonDocument>
#include <QDir>
#include <QStringBuilder>
#include <kscreen/config.h>
#include <kscreen/output.h>
@ -38,14 +38,15 @@ void Control::activateWatcher()
if (m_watcher) {
return;
}
m_watcher = new QFileSystemWatcher({filePath()}, this);
connect(m_watcher, &QFileSystemWatcher::fileChanged, this, [this]() {
m_watcher = new KDirWatch(this);
m_watcher->addFile(filePath());
connect(m_watcher, &KDirWatch::dirty, this, [this]() {
readFile();
Q_EMIT changed();
});
}
QFileSystemWatcher* Control::watcher() const
KDirWatch *Control::watcher() const
{
return m_watcher;
}
@ -61,19 +62,15 @@ bool Control::writeFile()
return true;
}
if (!QDir().mkpath(dirPath())) {
// TODO: error message
return false;
}
// write updated data to file
QFile file(path);
if (!file.open(QIODevice::WriteOnly)) {
// TODO: logging category?
// qCWarning(KSCREEN_COMMON) << "Failed to open config control file for writing! " << file.errorString();
return false;
}
file.write(QJsonDocument::fromVariant(infoMap).toJson());
// qCDebug(KSCREEN_COMMON) << "Control saved on: " << file.fileName();
return true;
}
@ -98,12 +95,12 @@ QString Control::filePathFromHash(const QString &hash) const
return dirPath() % hash;
}
QVariantMap& Control::info()
QVariantMap &Control::info()
{
return m_info;
}
const QVariantMap& Control::constInfo() const
const QVariantMap &Control::constInfo() const
{
return m_info;
}
@ -126,7 +123,7 @@ ControlConfig::ControlConfig(KScreen::ConfigPtr config, QObject *parent)
: Control(parent)
, m_config(config)
{
// qDebug() << "Looking for control file:" << config->connectedOutputsHash();
// qDebug() << "Looking for control file:" << config->connectedOutputsHash();
readFile();
// TODO: use a file watcher in case of changes to the control file while
@ -184,8 +181,7 @@ bool ControlConfig::writeFile()
{
bool success = true;
for (auto *outputControl : m_outputsControls) {
if (getOutputRetention(outputControl->id(), outputControl->name())
== OutputRetention::Individual) {
if (getOutputRetention(outputControl->id(), outputControl->name()) == OutputRetention::Individual) {
continue;
}
success &= outputControl->writeFile();
@ -304,7 +300,7 @@ qreal ControlConfig::getScale(const QString &outputId, const QString &outputName
// Info for output not found.
return -1;
}
}
void ControlConfig::setScale(const KScreen::OutputPtr &output, qreal value)
{
@ -321,7 +317,6 @@ void ControlConfig::setScale(const QString &outputId, const QString &outputName,
if (auto *control = getOutputControl(outputId, outputName)) {
control->setScale(value);
}
};
for (it = outputsInfo.begin(); it != outputsInfo.end(); ++it) {
@ -387,7 +382,6 @@ void ControlConfig::setAutoRotate(const QString &outputId, const QString &output
if (auto *control = getOutputControl(outputId, outputName)) {
control->setAutoRotate(value);
}
};
for (it = outputsInfo.begin(); it != outputsInfo.end(); ++it) {
@ -415,8 +409,7 @@ bool ControlConfig::getAutoRotateOnlyInTabletMode(const KScreen::OutputPtr &outp
return getAutoRotateOnlyInTabletMode(output->hashMd5(), output->name());
}
bool ControlConfig::getAutoRotateOnlyInTabletMode(const QString &outputId,
const QString &outputName) const
bool ControlConfig::getAutoRotateOnlyInTabletMode(const QString &outputId, const QString &outputName) const
{
const auto retention = getOutputRetention(outputId, outputName);
if (retention == OutputRetention::Individual) {
@ -445,8 +438,7 @@ void ControlConfig::setAutoRotateOnlyInTabletMode(const KScreen::OutputPtr &outp
}
// TODO: combine methods (templated functions)
void ControlConfig::setAutoRotateOnlyInTabletMode(const QString &outputId,
const QString &outputName, bool value)
void ControlConfig::setAutoRotateOnlyInTabletMode(const QString &outputId, const QString &outputName, bool value)
{
QList<QVariant>::iterator it;
QVariantList outputsInfo = getOutputs();
@ -477,14 +469,12 @@ void ControlConfig::setAutoRotateOnlyInTabletMode(const QString &outputId,
setOutputAutoRotateOnlyInTabletMode();
}
KScreen::OutputPtr ControlConfig::getReplicationSource(const KScreen::OutputPtr &output) const
{
return getReplicationSource(output->hashMd5(), output->name());
}
KScreen::OutputPtr ControlConfig::getReplicationSource(const QString &outputId,
const QString &outputName) const
KScreen::OutputPtr ControlConfig::getReplicationSource(const QString &outputId, const QString &outputName) const
{
const QVariantList outputsInfo = getOutputs();
for (const auto &variantInfo : outputsInfo) {
@ -512,14 +502,12 @@ KScreen::OutputPtr ControlConfig::getReplicationSource(const QString &outputId,
return nullptr;
}
void ControlConfig::setReplicationSource(const KScreen::OutputPtr &output,
const KScreen::OutputPtr &source)
void ControlConfig::setReplicationSource(const KScreen::OutputPtr &output, const KScreen::OutputPtr &source)
{
setReplicationSource(output->hashMd5(), output->name(), source);
}
void ControlConfig::setReplicationSource(const QString &outputId, const QString &outputName,
const KScreen::OutputPtr &source)
void ControlConfig::setReplicationSource(const QString &outputId, const QString &outputName, const KScreen::OutputPtr &source)
{
QList<QVariant>::iterator it;
QVariantList outputsInfo = getOutputs();
@ -558,8 +546,7 @@ void ControlConfig::setOutputs(QVariantList outputsInfo)
auto &infoMap = info();
infoMap[QStringLiteral("outputs")] = outputsInfo;
}
ControlOutput* ControlConfig::getOutputControl(const QString &outputId,
const QString &outputName) const
ControlOutput *ControlConfig::getOutputControl(const QString &outputId, const QString &outputName) const
{
for (auto *control : m_outputsControls) {
if (control->id() == outputId && control->name() == outputName) {

@ -14,16 +14,17 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/
#ifndef COMMON_CONTROL_H
#define COMMON_CONTROL_H
#include <kscreen/types.h>
#include <QObject>
#include <QVector>
#include <QVariantMap>
#include <QVector>
class QFileSystemWatcher;
class KDirWatch;
class Control : public QObject
{
@ -38,7 +39,6 @@ public:
explicit Control(QObject *parent = nullptr);
~Control() override = default;
virtual bool writeFile();
@ -52,16 +52,16 @@ protected:
virtual QString filePath() const = 0;
QString filePathFromHash(const QString &hash) const;
void readFile();
QVariantMap& info();
const QVariantMap& constInfo() const;
QFileSystemWatcher* watcher() const;
QVariantMap &info();
const QVariantMap &constInfo() const;
KDirWatch *watcher() const;
static OutputRetention convertVariantToOutputRetention(QVariant variant);
private:
static QString s_dirName;
QVariantMap m_info;
QFileSystemWatcher *m_watcher = nullptr;
KDirWatch *m_watcher = nullptr;
};
class ControlOutput;
@ -90,15 +90,12 @@ public:
bool getAutoRotateOnlyInTabletMode(const KScreen::OutputPtr &output) const;
bool getAutoRotateOnlyInTabletMode(const QString &outputId, const QString &outputName) const;
void setAutoRotateOnlyInTabletMode(const KScreen::OutputPtr &output, bool value);
void setAutoRotateOnlyInTabletMode(const QString &outputId, const QString &outputName,
bool value);
void setAutoRotateOnlyInTabletMode(const QString &outputId, const QString &outputName, bool value);
KScreen::OutputPtr getReplicationSource(const KScreen::OutputPtr &output) const;
KScreen::OutputPtr getReplicationSource(const QString &outputId,
const QString &outputName) const;
KScreen::OutputPtr getReplicationSource(const QString &outputId, const QString &outputName) const;
void setReplicationSource(const KScreen::OutputPtr &output, const KScreen::OutputPtr &source);
void setReplicationSource(const QString &outputId, const QString &outputName,
const KScreen::OutputPtr &source);
void setReplicationSource(const QString &outputId, const QString &outputName, const KScreen::OutputPtr &source);
QString dirPath() const override;
QString filePath() const override;
@ -110,11 +107,11 @@ private:
QVariantList getOutputs() const;
void setOutputs(QVariantList outputsInfo);
bool infoIsOutput(const QVariantMap &info, const QString &outputId, const QString &outputName) const;
ControlOutput* getOutputControl(const QString &outputId, const QString &outputName) const;
ControlOutput *getOutputControl(const QString &outputId, const QString &outputName) const;
KScreen::ConfigPtr m_config;
QStringList m_duplicateOutputIds;
QVector<ControlOutput*> m_outputsControls;
QVector<ControlOutput *> m_outputsControls;
};
class ControlOutput : public Control

@ -1,13 +1,16 @@
/********************************************************************
Copyright © 2019 Roman Gilg <subdiff@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/

@ -1,13 +1,16 @@
/********************************************************************
Copyright © 2019 Roman Gilg <subdiff@gmail.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*********************************************************************/

@ -24,6 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <kscreen/output.h>
#include <QRect>
#include <QDebug>
using namespace KScreen;
@ -42,10 +43,8 @@ void ConfigHandler::setConfig(KScreen::ConfigPtr config)
m_control.reset(new ControlConfig(config));
m_outputs = new OutputModel(this);
connect(m_outputs, &OutputModel::positionChanged,
this, &ConfigHandler::checkScreenNormalization);
connect(m_outputs, &OutputModel::sizeChanged,
this, &ConfigHandler::checkScreenNormalization);
connect(m_outputs, &OutputModel::positionChanged, this, &ConfigHandler::checkScreenNormalization);
connect(m_outputs, &OutputModel::sizeChanged, this, &ConfigHandler::checkScreenNormalization);
for (const KScreen::OutputPtr &output : config->outputs()) {
initOutput(output);
@ -56,17 +55,17 @@ void ConfigHandler::setConfig(KScreen::ConfigPtr config)
m_initialRetention = getRetention();
Q_EMIT retentionChanged();
connect(m_outputs, &OutputModel::changed,
this, [this]() {
connect(m_outputs, &OutputModel::changed, this, [this]() {
checkNeedsSave();
Q_EMIT changed();
});
connect(m_config.data(), &KScreen::Config::outputAdded,
this, [this]() { Q_EMIT outputConnect(true); });
connect(m_config.data(), &KScreen::Config::outputRemoved,
this, [this]() { Q_EMIT outputConnect(false); });
connect(m_config.data(), &KScreen::Config::primaryOutputChanged,
this, &ConfigHandler::primaryOutputChanged);
connect(m_config.data(), &KScreen::Config::outputAdded, this, [this]() {
Q_EMIT outputConnect(true);
});
connect(m_config.data(), &KScreen::Config::outputRemoved, this, [this]() {
Q_EMIT outputConnect(false);
});
connect(m_config.data(), &KScreen::Config::primaryOutputChanged, this, &ConfigHandler::primaryOutputChanged);
Q_EMIT outputModelChanged();
}
@ -92,8 +91,7 @@ void ConfigHandler::initOutput(const KScreen::OutputPtr &output)
resetScale(output);
m_outputs->add(output);
}
connect(output.data(), &KScreen::Output::isConnectedChanged,
this, [this, output]() {
connect(output.data(), &KScreen::Output::isConnectedChanged, this, [this, output]() {
Q_EMIT outputConnect(output->isConnected());
});
}
@ -101,12 +99,11 @@ void ConfigHandler::initOutput(const KScreen::OutputPtr &output)
void ConfigHandler::updateInitialData()
{
m_initialRetention = getRetention();
connect(new GetConfigOperation(), &GetConfigOperation::finished,
this, [this](ConfigOperation *op) {
connect(new GetConfigOperation(), &GetConfigOperation::finished, this, [this](ConfigOperation *op) {
if (op->hasError()) {
return;
}
m_initialConfig = qobject_cast<GetConfigOperation*>(op)->config();
m_initialConfig = qobject_cast<GetConfigOperation *>(op)->config();
for (auto output : m_config->outputs()) {
resetScale(output);
}
@ -117,11 +114,9 @@ void ConfigHandler::updateInitialData()
void ConfigHandler::checkNeedsSave()
{
if (m_config->supportedFeatures() &
KScreen::Config::Feature::PrimaryDisplay) {
if (m_config->supportedFeatures() & KScreen::Config::Feature::PrimaryDisplay) {
if (m_config->primaryOutput() && m_initialConfig->primaryOutput()) {
if (m_config->primaryOutput()->hashMd5() !=
m_initialConfig->primaryOutput()->hashMd5() ) {
if (m_config->primaryOutput()->hashMd5() != m_initialConfig->primaryOutput()->hashMd5()) {
Q_EMIT needsSaveChecked(true);
return;
}
@ -146,6 +141,7 @@ void ConfigHandler::checkNeedsSave()
if (output->isEnabled() != initialOutput->isEnabled()) {
needsSave = true;
}
// clang-format off
if (output->isEnabled()) {
needsSave |= output->currentModeId() !=
initialOutput->currentModeId()
@ -157,6 +153,7 @@ void ConfigHandler::checkNeedsSave()
|| autoRotateOnlyInTabletMode(output)
!= m_initialControl->getAutoRotateOnlyInTabletMode(output);
}
// clang-format on
if (needsSave) {
Q_EMIT needsSaveChecked(true);
return;
@ -211,9 +208,7 @@ QSize ConfigHandler::normalizeScreen()
void ConfigHandler::checkScreenNormalization()
{
const bool normalized = !m_config ||
(m_lastNormalizedScreenSize == screenSize() &&
m_outputs->positionsNormalized());
const bool normalized = !m_config || (m_lastNormalizedScreenSize == screenSize() && m_outputs->positionsNormalized());
Q_EMIT screenNormalizationUpdate(normalized);
}
@ -227,7 +222,6 @@ void ConfigHandler::primaryOutputSelected(int index)
void ConfigHandler::primaryOutputChanged(const KScreen::OutputPtr &output)
{
Q_UNUSED(output)
}
Control::OutputRetention ConfigHandler::getRetention() const
@ -246,7 +240,7 @@ Control::OutputRetention ConfigHandler::getRetention() const
for (const auto &output : outputs) {
const auto outputRet = m_control->getOutputRetention(output);
if (ret != outputRet ) {
if (ret != outputRet) {
// Control file with different retention values per output.
return Retention::Undefined;
}
@ -272,8 +266,7 @@ void ConfigHandler::setRetention(int retention)
if (!m_control) {
return;
}
if (retention != static_cast<int>(Retention::Global) &&
retention != static_cast<int>(Retention::Individual)) {
if (retention != static_cast<int>(Retention::Global) && retention != static_cast<int>(Retention::Individual)) {
// We only allow setting to global or individual retention.
return;
}
@ -304,8 +297,7 @@ KScreen::OutputPtr ConfigHandler::replicationSource(const KScreen::OutputPtr &ou
return m_control->getReplicationSource(output);
}
void ConfigHandler::setReplicationSource(KScreen::OutputPtr &output,
const KScreen::OutputPtr &source)
void ConfigHandler::setReplicationSource(KScreen::OutputPtr &output, const KScreen::OutputPtr &source)
{
m_control->setReplicationSource(output, source);
}

@ -29,25 +29,27 @@ class OutputModel;
class ConfigHandler : public QObject
{
Q_OBJECT
public:
explicit ConfigHandler (QObject *parent = nullptr);
explicit ConfigHandler(QObject *parent = nullptr);
~ConfigHandler() override = default;
void setConfig(KScreen::ConfigPtr config);
void updateInitialData();
OutputModel* outputModel() const {
OutputModel *outputModel() const
{
return m_outputs;
}
QSize normalizeScreen();
KScreen::ConfigPtr config() const {
KScreen::ConfigPtr config() const
{
return m_config;
}
KScreen::ConfigPtr initialConfig() const {
KScreen::ConfigPtr initialConfig() const
{
return m_initialConfig;
}
@ -92,8 +94,7 @@ private:
std::unique_ptr<ControlConfig> m_control;
std::unique_ptr<ControlConfig> m_initialControl;
Control::OutputRetention m_initialRetention = Control::OutputRetention::
Undefined;
Control::OutputRetention m_initialRetention = Control::OutputRetention::Undefined;
QSize m_lastNormalizedScreenSize;
};

@ -297,8 +297,7 @@ bool OutputModel::setEnabled(int outputIndex, bool enable)
return true;
}
inline
bool refreshRateCompare(float rate1, float rate2)
inline bool refreshRateCompare(float rate1, float rate2)
{
return qAbs(rate1 - rate2) < 0.5;
}

@ -33,6 +33,9 @@ void Screen::load()
void Screen::save()
{
if (!m_config)
return;
auto config = m_config->config();
bool atLeastOneEnabledOutput = false;

Loading…
Cancel
Save