1 Star 0 Fork 2

sn123.. / ukui-kwin

forked from 优麒麟 / ukui-kwin 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
orientation_sensor.cpp 5.46 KB
一键复制 编辑 原始数据 按行查看 历史
liuyi92 提交于 2020-04-13 10:09 . Original kwin 5.18.3-0ubuntu1 source code
/********************************************************************
KWin - the KDE window manager
This file is part of the KDE project.
Copyright (C) 2017 Martin Flöser <mgraesslin@kde.org>
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/>.
*********************************************************************/
#include "orientation_sensor.h"
#include <orientationsensoradaptor.h>
#include <QOrientationSensor>
#include <QOrientationReading>
#include <KConfigGroup>
#include <KStatusNotifierItem>
#include <KLocalizedString>
namespace KWin
{
OrientationSensor::OrientationSensor(QObject *parent)
: QObject(parent)
, m_sensor(new QOrientationSensor(this))
{
connect(m_sensor, &QOrientationSensor::readingChanged, this, &OrientationSensor::updateState);
connect(m_sensor, &QOrientationSensor::activeChanged, this, &OrientationSensor::refresh);
new OrientationSensorAdaptor(this);
}
void OrientationSensor::updateState()
{
auto toOrientation = [] (auto reading) {
switch (reading->orientation()) {
case QOrientationReading::Undefined:
return OrientationSensor::Orientation::Undefined;
case QOrientationReading::TopUp:
return OrientationSensor::Orientation::TopUp;
case QOrientationReading::TopDown:
return OrientationSensor::Orientation::TopDown;
case QOrientationReading::LeftUp:
return OrientationSensor::Orientation::LeftUp;
case QOrientationReading::RightUp:
return OrientationSensor::Orientation::RightUp;
case QOrientationReading::FaceUp:
return OrientationSensor::Orientation::FaceUp;
case QOrientationReading::FaceDown:
return OrientationSensor::Orientation::FaceDown;
default:
Q_UNREACHABLE();
}
};
const auto orientation = toOrientation(m_sensor->reading());
if (m_orientation != orientation) {
m_orientation = orientation;
emit orientationChanged();
}
}
void OrientationSensor::activate()
{
m_userEnabled = !m_userEnabled;
startStopSensor();
emit userEnabledChanged(m_userEnabled);
}
void OrientationSensor::refresh()
{
if (m_orientation == Orientation::Undefined) {
delete m_sni;
m_sni = nullptr;
return;
}
if (!m_sni) {
m_sni = new KStatusNotifierItem(QStringLiteral("kwin-automatic-rotation"), this);
m_sni->setStandardActionsEnabled(false);
m_sni->setCategory(KStatusNotifierItem::Hardware);
m_sni->setStatus(KStatusNotifierItem::Passive);
// TODO: proper icon with state
m_sni->setIconByName(QStringLiteral("preferences-desktop-display"));
// we start disabled, it gets updated when the sensor becomes active
connect(m_sni, &KStatusNotifierItem::activateRequested, this, &OrientationSensor::activate);
}
if (m_sensor->isActive()) {
m_sni->setTitle(i18n("Allow Rotation"));
m_sni->setToolTipTitle(i18n("Automatic screen rotation is enabled"));
updateState();
} else {
QString text;
switch(m_orientation) {
case Orientation::Undefined:
Q_UNREACHABLE(); //we don't want an sni if it's undefined
break;
case Orientation::FaceUp:
case Orientation::FaceDown:
text = i18n("Undefined");
break;
case Orientation::TopUp:
case Orientation::TopDown:
text = i18nc("Portrait oriented display", "Vertical");
break;
case Orientation::LeftUp:
case Orientation::RightUp:
text = i18nc("Landscape oriented display", "Horizontal");
break;
}
m_sni->setTitle(text);
m_sni->setToolTipTitle(i18n("Automatic screen rotation is disabled"));
}
}
OrientationSensor::~OrientationSensor() = default;
void OrientationSensor::setEnabled(bool enabled)
{
if (m_enabled == enabled) {
return;
}
m_enabled = enabled;
if (m_enabled) {
loadConfig();
refresh();
QDBusConnection::sessionBus().registerObject(QStringLiteral("/Orientation"), this);
} else {
QDBusConnection::sessionBus().unregisterObject(QStringLiteral("/Orientation"));
delete m_sni;
m_sni = nullptr;
}
startStopSensor();
}
void OrientationSensor::loadConfig()
{
if (!m_config) {
return;
}
m_userEnabled = m_config->group("OrientationSensor").readEntry("Enabled", true);
}
void OrientationSensor::startStopSensor()
{
if (m_enabled && m_userEnabled) {
m_sensor->start();
} else {
m_sensor->stop();
}
}
void OrientationSensor::setUserEnabled(bool enabled)
{
if (m_userEnabled == enabled) {
return;
}
m_userEnabled = enabled;
if (m_config) {
m_config->group("OrientationSensor").writeEntry("Enabled", m_userEnabled);
}
emit userEnabledChanged(m_userEnabled);
}
}
1
https://gitee.com/xtfvje/ukui-kwin.git
git@gitee.com:xtfvje/ukui-kwin.git
xtfvje
ukui-kwin
ukui-kwin
master

搜索帮助