diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -456,7 +456,6 @@ netinfo.cpp onscreennotification.cpp options.cpp - orientation_sensor.cpp osd.cpp outline.cpp outputscreens.cpp @@ -562,7 +561,6 @@ qt5_add_dbus_adaptor(kwin_SRCS org.kde.kwin.Compositing.xml dbusinterface.h KWin::CompositorDBusInterface) qt5_add_dbus_adaptor(kwin_SRCS org.kde.kwin.ColorCorrect.xml colorcorrection/colorcorrectdbusinterface.h KWin::ColorCorrect::ColorCorrectDBusInterface) qt5_add_dbus_adaptor(kwin_SRCS ${kwin_effects_dbus_xml} effects.h KWin::EffectsHandlerImpl) -qt5_add_dbus_adaptor(kwin_SRCS org.kde.kwin.OrientationSensor.xml orientation_sensor.h KWin::OrientationSensor) qt5_add_dbus_adaptor(kwin_SRCS org.kde.KWin.VirtualDesktopManager.xml dbusinterface.h KWin::VirtualDesktopManagerDBusInterface) qt5_add_dbus_adaptor(kwin_SRCS org.kde.KWin.Session.xml sm.h KWin::SessionManager) diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt --- a/autotests/CMakeLists.txt +++ b/autotests/CMakeLists.txt @@ -167,7 +167,6 @@ include_directories(${KWin_SOURCE_DIR}) set(testScriptedEffectLoader_SRCS ../effectloader.cpp - ../orientation_sensor.cpp ../screens.cpp ../scripting/scriptedeffect.cpp ../scripting/scripting_logging.cpp @@ -179,7 +178,6 @@ test_scripted_effectloader.cpp ) kconfig_add_kcfg_files(testScriptedEffectLoader_SRCS ../settings.kcfgc) -qt5_add_dbus_adaptor(testScriptedEffectLoader_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/../org.kde.kwin.OrientationSensor.xml ${CMAKE_CURRENT_SOURCE_DIR}/../orientation_sensor.h KWin::OrientationSensor) add_executable(testScriptedEffectLoader ${testScriptedEffectLoader_SRCS}) target_link_libraries(testScriptedEffectLoader @@ -245,7 +243,6 @@ # Test Screens ######################################################## set(testScreens_SRCS - ../orientation_sensor.cpp ../screens.cpp ../x11eventfilter.cpp mock_abstract_client.cpp @@ -255,7 +252,6 @@ test_screens.cpp ) kconfig_add_kcfg_files(testScreens_SRCS ../settings.kcfgc) -qt5_add_dbus_adaptor(testScreens_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/../org.kde.kwin.OrientationSensor.xml ${CMAKE_CURRENT_SOURCE_DIR}/../orientation_sensor.h KWin::OrientationSensor) add_executable(testScreens ${testScreens_SRCS}) target_include_directories(testScreens BEFORE PRIVATE ./) @@ -282,7 +278,6 @@ set(testScreenEdges_SRCS ../atoms.cpp ../gestures.cpp - ../orientation_sensor.cpp ../plugins/platforms/x11/standalone/edge.cpp ../screenedge.cpp ../screens.cpp @@ -296,7 +291,6 @@ ) kconfig_add_kcfg_files(testScreenEdges_SRCS ../settings.kcfgc) qt5_add_dbus_interface(testScreenEdges_SRCS ${KSCREENLOCKER_DBUS_INTERFACES_DIR}/kf5_org.freedesktop.ScreenSaver.xml screenlocker_interface ) -qt5_add_dbus_adaptor(testScreenEdges_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/../org.kde.kwin.OrientationSensor.xml ${CMAKE_CURRENT_SOURCE_DIR}/../orientation_sensor.h KWin::OrientationSensor) add_executable(testScreenEdges ${testScreenEdges_SRCS}) set_target_properties(testScreenEdges PROPERTIES COMPILE_DEFINITIONS "NO_NONE_WINDOW") diff --git a/libinput/connection.cpp b/libinput/connection.cpp --- a/libinput/connection.cpp +++ b/libinput/connection.cpp @@ -661,6 +661,8 @@ } } device->setScreenId(id); + + // TODO: this is currently non-functional even on DRM. Needs orientation() override there. device->setOrientation(screens()->orientation(id)); #else Q_UNUSED(device) diff --git a/org.kde.kwin.OrientationSensor.xml b/org.kde.kwin.OrientationSensor.xml deleted file mode 100644 --- a/org.kde.kwin.OrientationSensor.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/orientation_sensor.h b/orientation_sensor.h deleted file mode 100644 --- a/orientation_sensor.h +++ /dev/null @@ -1,91 +0,0 @@ -/******************************************************************** - KWin - the KDE window manager - This file is part of the KDE project. - -Copyright (C) 2017 Martin Flöser - -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 . -*********************************************************************/ -#pragma once - -#include - -#include - -#include - -class QOrientationSensor; -class KStatusNotifierItem; - -namespace KWin -{ - -class KWIN_EXPORT OrientationSensor : public QObject -{ - Q_OBJECT - Q_PROPERTY(bool userEnabled READ isUserEnabled WRITE setUserEnabled NOTIFY userEnabledChanged) -public: - explicit OrientationSensor(QObject *parent = nullptr); - ~OrientationSensor() override; - - void setEnabled(bool enabled); - - /** - * Just like QOrientationReading::Orientation, - * copied to not leak the QSensors API into internal API. - */ - enum class Orientation { - Undefined, - TopUp, - TopDown, - LeftUp, - RightUp, - FaceUp, - FaceDown - }; - Q_ENUM(Orientation) - - Orientation orientation() const { - return m_orientation; - } - - void setConfig(KSharedConfig::Ptr config) { - m_config = std::move(config); - } - - bool isUserEnabled() const { - return m_userEnabled; - } - void setUserEnabled(bool enabled); - -Q_SIGNALS: - void orientationChanged(); - void userEnabledChanged(bool); - -private: - void startStopSensor(); - void loadConfig(); - void refresh(); - void activate(); - void updateState(); - - QOrientationSensor *m_sensor; - bool m_enabled = false; - bool m_userEnabled = true; - Orientation m_orientation = Orientation::Undefined; - KStatusNotifierItem *m_sni = nullptr; - KSharedConfig::Ptr m_config; -}; - -} diff --git a/orientation_sensor.cpp b/orientation_sensor.cpp deleted file mode 100644 --- a/orientation_sensor.cpp +++ /dev/null @@ -1,176 +0,0 @@ -/******************************************************************** - KWin - the KDE window manager - This file is part of the KDE project. - -Copyright (C) 2017 Martin Flöser - -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 . -*********************************************************************/ -#include "orientation_sensor.h" -#include - -#include -#include - -#include -#include -#include - -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); -} - -} diff --git a/plugins/platforms/drm/drm_output.h b/plugins/platforms/drm/drm_output.h --- a/plugins/platforms/drm/drm_output.h +++ b/plugins/platforms/drm/drm_output.h @@ -139,7 +139,6 @@ void setWaylandMode(); void updateTransform(Transform transform) override; - void automaticRotation(); int gammaRampSize() const override; bool setGammaRamp(const GammaRamp &gamma) override; diff --git a/plugins/platforms/drm/drm_output.cpp b/plugins/platforms/drm/drm_output.cpp --- a/plugins/platforms/drm/drm_output.cpp +++ b/plugins/platforms/drm/drm_output.cpp @@ -27,7 +27,6 @@ #include "logind.h" #include "logging.h" #include "main.h" -#include "orientation_sensor.h" #include "screens_drm.h" #include "wayland_server.h" // KWayland @@ -270,15 +269,6 @@ setInternal(connector->connector_type == DRM_MODE_CONNECTOR_LVDS || connector->connector_type == DRM_MODE_CONNECTOR_eDP || connector->connector_type == DRM_MODE_CONNECTOR_DSI); setDpmsSupported(true); - - if (isInternal()) { - connect(kwinApp(), &Application::screensCreated, this, - [this] { - connect(screens()->orientationSensor(), &OrientationSensor::orientationChanged, this, &DrmOutput::automaticRotation); - } - ); - } - initOutputDevice(connector); if (!m_backend->atomicModeSetting() && !m_crtc->blank()) { @@ -1087,47 +1077,6 @@ || transformations.testFlag(DrmPlane::Transformation::Rotate270); } -void DrmOutput::automaticRotation() -{ - if (!m_primaryPlane) { - return; - } - const auto supportedTransformations = m_primaryPlane->supportedTransformations(); - const auto requestedTransformation = screens()->orientationSensor()->orientation(); - - Transform newTransformation = Transform::Normal; - switch (requestedTransformation) { - case OrientationSensor::Orientation::TopUp: - newTransformation = Transform::Normal; - break; - case OrientationSensor::Orientation::TopDown: - if (!supportedTransformations.testFlag(DrmPlane::Transformation::Rotate180)) { - return; - } - newTransformation = Transform::Rotated180; - break; - case OrientationSensor::Orientation::LeftUp: - if (!supportedTransformations.testFlag(DrmPlane::Transformation::Rotate90)) { - return; - } - newTransformation = Transform::Rotated90; - break; - case OrientationSensor::Orientation::RightUp: - if (!supportedTransformations.testFlag(DrmPlane::Transformation::Rotate270)) { - return; - } - newTransformation = Transform::Rotated270; - break; - case OrientationSensor::Orientation::FaceUp: - case OrientationSensor::Orientation::FaceDown: - case OrientationSensor::Orientation::Undefined: - // unsupported - return; - } - setTransform(newTransformation); - emit screens()->changed(); -} - int DrmOutput::gammaRampSize() const { return m_crtc->gammaRampSize(); diff --git a/screens.h b/screens.h --- a/screens.h +++ b/screens.h @@ -35,7 +35,6 @@ { class AbstractClient; class Platform; -class OrientationSensor; class KWIN_EXPORT Screens : public QObject { @@ -147,16 +146,6 @@ virtual Qt::ScreenOrientation orientation(int screen) const; - /** - * Provides access to the OrientationSensor. The OrientationSensor is controlled by the - * base implementation. The implementing subclass can use this to get notifications about - * changes of the orientation and current orientation. There is no need to enable/disable it, - * that is done by the base implementation - */ - OrientationSensor *orientationSensor() const { - return m_orientationSensor; - } - public Q_SLOTS: void reconfigure(); @@ -208,7 +197,6 @@ QTimer *m_changedTimer; KSharedConfig::Ptr m_config; QSize m_boundingSize; - OrientationSensor *m_orientationSensor; qreal m_maxScale; KWIN_SINGLETON(Screens) diff --git a/screens.cpp b/screens.cpp --- a/screens.cpp +++ b/screens.cpp @@ -21,7 +21,6 @@ #include #include #include "cursor.h" -#include "orientation_sensor.h" #include "utils.h" #include "settings.h" #include @@ -55,21 +54,8 @@ , m_current(0) , m_currentFollowsMouse(false) , m_changedTimer(new QTimer(this)) - , m_orientationSensor(new OrientationSensor(this)) , m_maxScale(1.0) { - connect(this, &Screens::changed, this, - [this] { - int internalIndex = -1; - for (int i = 0; i < m_count; i++) { - if (isInternal(i)) { - internalIndex = i; - break; - } - } - m_orientationSensor->setEnabled(internalIndex != -1 && supportsTransformations(internalIndex)); - } - ); } Screens::~Screens() @@ -241,9 +227,6 @@ void Screens::setConfig(KSharedConfig::Ptr config) { m_config = config; - if (m_orientationSensor) { - m_orientationSensor->setConfig(config); - } } } // namespace diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -38,10 +38,3 @@ target_link_libraries(cursorhotspottest Qt5::Widgets) include_directories(${CMAKE_CURRENT_BINARY_DIR}) -set(orientationtest_SRCS - ../orientation_sensor.cpp - orientationtest.cpp -) -qt5_add_dbus_adaptor(orientationtest_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/../org.kde.kwin.OrientationSensor.xml ${CMAKE_CURRENT_SOURCE_DIR}/../orientation_sensor.h KWin::OrientationSensor) -add_executable(orientationtest ${orientationtest_SRCS}) -target_link_libraries(orientationtest Qt5::DBus Qt5::Widgets Qt5::Sensors KF5::ConfigCore KF5::Notifications KF5::I18n) diff --git a/tests/orientationtest.cpp b/tests/orientationtest.cpp deleted file mode 100644 --- a/tests/orientationtest.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************** - KWin - the KDE window manager - This file is part of the KDE project. - -Copyright (C) 2017 Martin Flöser - -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 . -*********************************************************************/ -#include "../orientation_sensor.h" -#include -#include - -using KWin::OrientationSensor; - -int main(int argc, char *argv[]) -{ - QApplication app(argc, argv); - - OrientationSensor sensor; - QObject::connect(&sensor, &OrientationSensor::orientationChanged, - [&sensor] { - const auto orientation = sensor.orientation(); - switch (orientation) { - case OrientationSensor::Orientation::Undefined: - qDebug() << "Undefined"; - break; - case OrientationSensor::Orientation::TopUp: - qDebug() << "TopUp"; - break; - case OrientationSensor::Orientation::TopDown: - qDebug() << "TopDown"; - break; - case OrientationSensor::Orientation::LeftUp: - qDebug() << "LeftUp"; - break; - case OrientationSensor::Orientation::RightUp: - qDebug() << "RightUp"; - break; - case OrientationSensor::Orientation::FaceUp: - qDebug() << "FaceUp"; - break; - case OrientationSensor::Orientation::FaceDown: - qDebug() << "FaceDown"; - break; - } - } - ); - sensor.setEnabled(true); - - return app.exec(); -}